在 CentOS(以及大多数 Linux 发行版)中,ulimit 用于控制单个用户/进程可使用的系统资源上限,常见包括:
下面从查看 → 临时调整 → 永久优化 → 常见场景给你一个完整说明。
ulimit -a
常见重要项:
open files (-n) 1024
max user processes (-u) 4096
查看某一项:
ulimit -n # 文件描述符
ulimit -u # 最大进程数
ulimit -n 65535
ulimit -u 65535
⚠️ 仅对当前终端和由其启动的进程有效,重启失效。
/etc/security/limits.confvi /etc/security/limits.conf
示例(优化常见服务):
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
说明:
*:所有用户(也可写 nginx、mysql 等)soft:警告值hard:硬限制nofile:文件描述符nproc:最大进程数检查以下文件是否包含:
grep pam_limits /etc/pam.d/login
grep pam_limits /etc/pam.d/sshd
应有:
session required pam_limits.so
如果没有,手动添加。
limits.conf 对 systemd 服务可能不生效
例如 Nginx / MySQL:
mkdir -p /etc/systemd/system/nginx.service.d
vi /etc/systemd/system/nginx.service.d/limits.conf
内容:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
systemctl daemon-reload
systemctl restart nginx
即使 ulimit 调大,内核也有总限制:
cat /proc/sys/fs/file-max
临时调整:
sysctl -w fs.file-max=1000000
永久:
vi /etc/sysctl.conf
fs.file-max = 1000000
sysctl -p
nofile 65535~100000
nproc 65535
mysql soft nofile 65535
mysql hard nofile 65535
Docker 默认继承宿主机,但容器内需单独设置:
docker run --ulimit nofile=65535:65535
# 重新登录后
ulimit -n
# 或查看进程
cat /proc/<pid>/limits
如果你能告诉我:
我可以给你针对你环境的精确配置模板。