Linux修改最大文件描述符数的操作指南

 更新时间:2026年03月24日 09:13:19   作者:feng68_  
LimitNOFILE(最大文件描述符数)是至关重要的瓶颈,本文总结了压测前必须优化的文件描述符限制配置,涉及系统层、服务进程层和应用配置层三个维度,希望对大家有所帮助

压测必做

修改最大文件描述符数文件

LimitNOFILE(最大文件描述符数)是至关重要的瓶颈。如果设置不当,会迅速遇到 Too many open files 错误,导致压测失败或数据不准。

系统层

[root@server1 ~]# tail -n4 /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
# (注:压测机本身如果是 Linux,也需要改这个,否则 AB 发起端也会报错)
# 如果是 systemd 管理的系统
# DefaultLimitNOFILE=65535 等同于 DefaultLimitNOFILE=65535:65535
# 对于压测环境,我们需要确保软限制本身就足够大,这样服务启动后立即可用足够的文件描述符,65535是通用的安全值,足以支撑数万级的并发。如果是超高并发压测(如十万级),建议直接设为 1048576 (100万)
[root@server1 ~]# grep -i defaultlimitnofile /etc/systemd/system.conf
#DefaultLimitNOFILE=1024:524288		Soft Limit(软限制)=1024;Hard Limit(硬限制)=524288,实际生效的文件描述符上限只有1024
DefaultLimitNOFILE=65535
# 同时也把进程数限制放开,防止压测时进程数不够
DefaultLimitNPROC=65535

服务进程层

# nginx、php
# /etc/systemd/system/nginx.service、/etc/systemd/systemphp-fpm.service
[Service]
LimitNOFILE=65535
# 同时增加进程数限制
LimitNPROC=65535
# (注意:如果使用了多个pool配置文件,systemd只控制主进程,子进程通常会继承主进程的限制,但确保主进程足够大很重要)
# 如果是超高并发,建议也调大堆栈大小,防止递归或复杂计算爆栈
# LimitSTACK=8388608
# 数据库
# /etc/systemd/system/mysqld.service
# 如果是文件是/usr/lib/……下的文件,它是软件包(RPM/DEB)自带的,如果直接修改它,下次运行yum update或apt upgrade升级时,修改会被强制覆盖丢失。
# 建议使用systemctl edit命令,它会自动创建/etc/systemd/system/redis.service.d/目录和正确的配置文件。
# 如果是nano编辑的话下面会有提示,比如“^O”表示ctrl键+O键
[Service]
LimitNOFILE=65535
LimitNPROC=65535
# memcached
[root@server3 ~]# systemctl status memcached.service | grep -i load
     Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; preset: disabled)
# /usr/lib/systemd/system/memcached.service文件
[Service]
LimitNOFILE=65535
LimitNPROC=65535

应用配置文件层

应用配置文件层 (App Config) - 软限制,需配合系统限制。

# nginx全局块,最大并发连接数=worker_processes*worker_connections
worker_rlimit_nofile 65535;
events {
    worker_connections 65535; # 每个工作进程的最大连接数
    multi_accept on;
}
# mysql(my.cnf/mysqld.cnf)
[mysqld]
open_files_limit = 65535
max_connections = 2000 # 根据服务器内存调整,不要无脑设大
table_open_cache = 4096
# redis.conf
# Redis通常会自动尝试设置ulimit,但最好在systemd里确保它有权限设置,也就是在服务进程层设定好LimitNOFILE、LimitNPROC。
maxclients 10000
# memcached(/etc/sysconfig/memcached)
OPTIONS="……………… -c 10240" # 最大连接数,确保这个值小于系统的LimitNOFILE
; PHP-FPM的进程池配置文件(/usr/local/php/etc/php-fpm.d/www.conf)
; --- 进程管理方式 ---
; 压测环境推荐用 static (静态),性能最好,没有动态创建进程的开销
; 生产环境如果内存紧张可用 dynamic
pm = static
; --- 最大子进程数 (核心参数) ---
; 计算公式:总内存 / 单个进程内存
; 假设服务器 16G 内存,单个 php 进程 50M,则 16*1024/50 ≈ 320
; 压测环境为了跑满机器,可以设大一点,比如 512 或 1024 (需监控内存别爆)
pm.max_children = 512
; --- 以下参数在 pm = static 时无效,但建议保留以防切换模式 ---
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 50
; --- 单个进程最大请求数 ---
; 防止内存泄漏,处理这么多请求后重启进程。压测时可适当调大减少重启开销
pm.max_requests = 10000
; --- 监听队列长度 (非常重要!) ---
; 当所有子进程都在忙时,新的请求会进入队列。
; 默认通常是 128 或 511,压测时必须调大,否则会出现 502 Bad Gateway
listen.backlog = 65535
; --- 监听权限 ---
; 确保 nginx 能连接上
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

到此这篇关于Linux修改最大文件描述符数的操作指南的文章就介绍到这了,更多相关Linux修改最大文件描述符数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux系统下安装rz/sz命令及使用说明(详解)

    Linux系统下安装rz/sz命令及使用说明(详解)

    下面小编就为大家带来一篇Linux系统下安装rz/sz命令及使用说明(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-12-12
  • 树莓派搭建nas服务器的详细过程

    树莓派搭建nas服务器的详细过程

    这篇文章主要介绍了树莓派搭建nas服务器的教程,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Vmware虚拟机中centOS7安装图文教程

    Vmware虚拟机中centOS7安装图文教程

    这篇文章主要为大家详细介绍了Vmware虚拟机中centOS7安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • linux(ubuntu)用户连续N次输入错误密码进行登陆时自动锁定X分钟

    linux(ubuntu)用户连续N次输入错误密码进行登陆时自动锁定X分钟

    这篇文章主要介绍了linux(ubuntu)用户连续N次输入错误密码进行登陆时,自动锁定X分钟,需要的朋友可以参考下
    2019-09-09
  • 等保测评:Centos超时退出问题

    等保测评:Centos超时退出问题

    等保测评主机测评中需要查询主机的超时退出配置,具体在Centos中的话,主要有两种方式可以实现超时退出的功能。文中给大家详细介绍,感兴趣的朋友跟随小编一起看看吧
    2019-07-07
  • CentOS中的正则表达式

    CentOS中的正则表达式

    这篇文章主要介绍了CentOS中的正则表达式 ,本文给大家介绍的非常详细,需要的朋友可以参考下
    2018-04-04
  • 详解如何在Linux上一次性批量重命名一组文件

    详解如何在Linux上一次性批量重命名一组文件

    这篇文章主要介绍了详解如何在Linux上一次性批量重命名一组文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Linux系统中卸载与安装JDK的详细教程

    Linux系统中卸载与安装JDK的详细教程

    本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包、解压并配置环境变量,卸载过程则涉及查找JDK路径、删除文件及更新环境变量,需要的朋友可以参考下
    2025-04-04
  • Linux多线程编程快速入门

    Linux多线程编程快速入门

    这篇文章主要介绍了Linux多线程编程快速入门,涉及到了线程基本知识,线程标识,线程创建,线程终止,管理线程的终止等相关内容,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下
    2018-01-01
  • Linux防火墙配置及iptables与firewalld的使用解读

    Linux防火墙配置及iptables与firewalld的使用解读

    防火墙是一种网络安全设备,通过规则控制进出网络的访问行为,它分为硬件防火墙和软件防火墙两大类,iptables是Linux系统中用于配置防火墙的工具,具有4个表和5个链,firewall命令用于配置和管理防火墙,有drop、block、public、external、dmz等不同的区域配置
    2025-01-01

最新评论