ulimit 的 -n 和 -u 限制最关键,因文件描述符耗尽会导致“Too many open files”使网络服务瘫痪,进程数超限则引发 fork 爆炸、系统无响应;二者默认值低(常为1024/1024),高并发场景必须调优,并需通过 limits.conf + PAM 或 systemd 单元配置持久化生效。

ulimit 是 Linux 中控制单用户资源使用的核心工具,其中文件打开数(-n)和最大进程数(-u)是最常调整、也最容易引发故障的两项限制。
为什么这两个限制特别关键
文件打开数限制直接影响网络服务并发能力——每个 TCP 连接、每个日志文件、每个配置文件加载都占用一个文件描述符。默认 1024 的值在 Nginx、Redis 或 Java 应用中往往几秒就耗尽,报错 “Too many open files”。进程数限制则防止 fork 爆炸,避免因脚本误写或恶意循环导致系统无响应,甚至影响 SSH 登录。
快速查看与临时修改
当前会话生效,无需重启:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 查看当前值:
ulimit -n和ulimit -u - 临时提高文件描述符上限(例如设为 65535):
ulimit -n 65535 - 临时提高用户进程上限(例如设为 8192):
ulimit -u 8192 - 同时设置软硬限制(普通用户只能调高软限,硬限需 root):
ulimit -Sn 65535 && ulimit -Hn 65535
让配置永久生效
仅靠命令行设置在新登录或子 shell 中会失效。必须写入系统级配置:
- 编辑
/etc/security/limits.conf,追加两行(以用户www-data为例):
www-data soft nofile 65535<br> www-data hard nofile 65535<br> www-data soft nproc 8192<br> www-data hard nproc 8192
- 确保 PAM 模块已启用:检查
/etc/pam.d/common-session或/etc/pam.d/login是否包含session required pam_limits.so - 新会话才生效——重新登录或重启服务;systemd 服务需额外配置
LimitNOFILE和TasksMax
验证是否真正生效
不能只信配置文件,要实测:
- 用目标用户登录后执行
ulimit -a | grep -E "(open|process)" - 查看某运行中的进程实际限制:
cat /proc/[PID]/limits | grep -E "(Max open|Max processes)" - 若仍显示旧值,检查是否被 systemd 覆盖(尤其 Ubuntu 22.04+)、是否漏配 PAM、或用户属于多个组导致 limits 冲突

















