温馨提示×

centos ulimit怎么优化

小樊
56
2026-10-14 20:44:28
栏目: 智能运维

在 CentOS(以及大多数 Linux 发行版)中,ulimit 用于控制单个用户/进程可使用的系统资源上限,常见包括:

  • 文件描述符(open files)
  • 进程数(max user processes)
  • 栈大小(stack size)
  • 内存相关(如 virtual memory)

下面从查看 → 临时调整 → 永久优化 → 常见场景给你一个完整说明。


一、查看当前 ulimit

ulimit -a

常见重要项:

open files                      (-n) 1024
max user processes              (-u) 4096

查看某一项:

ulimit -n   # 文件描述符
ulimit -u   # 最大进程数

二、临时修改(当前 shell 生效)

ulimit -n 65535
ulimit -u 65535

⚠️ 仅对当前终端和由其启动的进程有效,重启失效。


三、永久优化(推荐做法)

1️⃣ 修改 /etc/security/limits.conf

vi /etc/security/limits.conf

示例(优化常见服务):

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

说明:

  • *:所有用户(也可写 nginx、mysql 等)
  • soft:警告值
  • hard:硬限制
  • nofile:文件描述符
  • nproc:最大进程数

2️⃣ 确保 PAM 生效(很重要)

检查以下文件是否包含:

grep pam_limits /etc/pam.d/login
grep pam_limits /etc/pam.d/sshd

应有:

session required pam_limits.so

如果没有,手动添加。


3️⃣ systemd 服务(CentOS 7+ 重点)

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

五、常见优化场景

✅ 高并发 Web 服务(Nginx / Java)

nofile 65535~100000
nproc  65535

✅ MySQL

mysql soft nofile 65535
mysql hard nofile 65535

✅ Docker

Docker 默认继承宿主机,但容器内需单独设置:

docker run --ulimit nofile=65535:65535

六、验证是否生效

# 重新登录后
ulimit -n
# 或查看进程
cat /proc/<pid>/limits

如果你能告诉我:

  • CentOS 版本(6 / 7 / 8 / Stream)
  • 使用场景(Web / DB / 微服务)
  • 是否用 systemd

我可以给你针对你环境的精确配置模板。

0 踩