在 CentOS 中,ulimit 用于限制 用户/进程 可使用的系统资源(如文件句柄数、进程数、内存等)。配置方式主要分为 临时配置 和 永久配置 两类,下面按常见使用场景说明。
ulimit -a
常用参数:
-n:打开文件数(file descriptors)-u:最大用户进程数-s:栈大小-c:core 文件大小-m / -v:内存限制(部分系统不支持)ulimit -n 65535
ulimit -u 4096
⚠️ 重启或退出会话后失效
/etc/security/limits.conf(最常用)编辑文件:
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
格式说明:
<用户/组> <soft/hard> <资源类型> <值>
常见资源:
nofile:打开文件数nproc:进程数core:core 文件大小memlock:锁定内存www soft nofile 100000
www hard nofile 100000
/etc/security/limits.d/(推荐)CentOS 默认会加载该目录下的 .conf 文件:
vi /etc/security/limits.d/20-nofile.conf
内容示例:
* soft nofile 65535
* hard nofile 65535
数字前缀决定加载顺序,越小越先加载
如果是 systemd 管理的服务(如 nginx、mysql),limits.conf 可能不生效。
systemctl edit nginx
添加:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
重新加载:
systemctl daemon-reload
systemctl restart nginx
或直接修改:
vi /usr/lib/systemd/system/nginx.service
cat /proc/sys/fs/file-max
sysctl -w fs.file-max=2000000
vi /etc/sysctl.conf
fs.file-max = 2000000
sysctl -p
su - username
ulimit -n
cat /proc/<pid>/limits
/etc/pam.d/login 中是否有 pam_limits.so)部分资源对 root 也受 limits.conf 限制,需显式配置:
root soft nofile 65535
root hard nofile 65535
如果你能说明 具体场景(如:Web 服务、数据库、Docker、高并发),我可以给你更精确的配置示例。