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文件操作实战之压缩,远程传输和终端计算速成

    Linux文件操作实战之压缩,远程传输和终端计算速成

    Linux终端操作是运维、开发必备基础,日常工作与面试均高频涉及,本文以实操为核心,讲解tar、scp、bc指令用法,补充面试题与热键,结合故事拆解Shell与内核交互逻辑,感兴趣的小伙伴可以了解下
    2026-01-01
  • Vim中宏命令的使用实例详解

    Vim中宏命令的使用实例详解

    这篇文章主要给大家介绍了Vim中宏命令使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案

    Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案

    WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以 及MySQL数据库的整合软件包。免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发。在windows下将Apache+PHP+Mysql 集成环境,拥有简单的图形和菜单安装和配置环境。
    2014-09-09
  • Ubuntu如何轻松编译openJDK详解

    Ubuntu如何轻松编译openJDK详解

    这篇文章主要给大家介绍了关于Ubuntu如何轻松编译openJDK的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • Linux环境下生成openssl证书注意细节介绍

    Linux环境下生成openssl证书注意细节介绍

    大家好,本篇文章主要讲的是Linux环境下生成openssl证书注意细节介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境

    linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境

    这篇文章主要介绍了linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目环境,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Ubuntu安装PHP和PHP Nginx配置方法

    Ubuntu安装PHP和PHP Nginx配置方法

    本篇文章主要介绍了Ubuntu安装PHP和PHP Nginx配置方法,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • linux服务器上openssl版本升级方式

    linux服务器上openssl版本升级方式

    文章详细介绍了在Linux服务器上升级OpenSSL版本的步骤,包括查看当前版本、检查yum源、下载源码、编译安装、创建软链、更新动态链接库以及验证版本
    2025-03-03
  • Linux进程管理与计划任务详解

    Linux进程管理与计划任务详解

    文章讲解了Linux进程管理与计划任务的核心知识,涵盖程序与进程的区别、ps/top等监控工具参数、进程控制(启动/挂起/终止)及at/crontab计划任务配置,强调系统自动化运维的重要性
    2025-08-08
  • Ubuntu Server 16.04安装MySQL设置远程访问出现问题的完美解决方案(error:10061)

    Ubuntu Server 16.04安装MySQL设置远程访问出现问题的完美解决方案(error:10061)

    Ubuntu 16.04安装MySQL及需要其他主机远程连接MySQL时的设置问题。在安装过程中会出现各种奇葩问题,下面小编给大家带来了Ubuntu Server 16.04安装MySQL设置远程访问出现问题的完美解决方案(error:10061),一起看看吧
    2016-10-10

最新评论