在 Debian 系统中,ulimit(用户资源限制)可以在多个地方设置,具体取决于你是想临时生效还是永久生效,以及作用范围是当前 shell / 用户 / 系统服务。
下面按常见场景说明:
直接在终端执行:
ulimit -n 65535 # 打开文件数
ulimit -u 4096 # 最大进程数
查看当前限制:
ulimit -a
⚠️ 只在当前 shell 及其子进程有效,重启或重新登录失效。
/etc/security/limits.conf编辑文件:
sudo vim /etc/security/limits.conf
示例(对 www-data 用户):
www-data soft nofile 65535
www-data hard nofile 65535
或对所有用户:
* soft nofile 65535
* hard nofile 65535
字段说明:
soft:软限制(可临时超过,但会警告)hard:硬限制(不可超过)nofile:打开文件数nproc:进程数⚠️ 注意:
确认以下文件中包含:
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
包含:
session required pam_limits.so
如果你是用 systemctl 启动的服务(如 Nginx、MySQL、Redis),
limits.conf 不会生效,需要在 service 文件中设置。
sudo systemctl edit nginx
写入:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
cat /proc/sys/fs/file-max
临时修改:
sudo sysctl -w fs.file-max=1000000
永久:
sudo vim /etc/sysctl.conf
fs.file-max=1000000
❌ ulimit 写在 .bashrc 只对交互 shell 有效
❌ limits.conf 对 systemd 服务无效
❌ Docker 容器需要额外设置(--ulimit)
| 场景 | 设置位置 |
|---|---|
| 登录用户 | /etc/security/limits.conf |
| systemd 服务 | systemctl edit xxx |
| 临时测试 | ulimit 命令 |
| 容器 | docker --ulimit |
如果你能告诉我:
我可以给你更精确的配置示例。