在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制进程资源使用。针对某个用户配置 ulimit,常见做法有下面几种,按推荐程度说明。
/etc/security/limits.conf(最常用)这是针对用户/用户组设置 ulimit 的标准方法。
sudo vim /etc/security/limits.conf
# 格式:
# <domain> <type> <item> <value>
# 针对用户 testuser
testuser soft nofile 65535
testuser hard nofile 131072
# 针对用户组 dev
@dev soft nproc 4096
@dev hard nproc 8192
| 项目 | 含义 |
|---|---|
| nofile | 最大打开文件数 |
| nproc | 最大进程数 |
| stack | 栈大小 |
| memlock | 锁定内存 |
| core | core dump 大小 |
limits.conf 依赖 PAM,否则不生效。
检查以下文件是否包含:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
如果没有,手动添加:
session required pam_limits.so
✅ 适用于:
su - username如果你使用的是 systemd,limits.conf 有时不会完全生效。
sudo mkdir -p /etc/systemd/system/user@1000.service.d
sudo vim /etc/systemd/system/user@1000.service.d/limits.conf
1000 是用户的 UID,可用
id -u 用户名查看
[Service]
LimitNOFILE=65535
LimitNPROC=4096
sudo systemctl daemon-reload
✅ 适用于:
如果是 服务用户(如 www-data、mysql),不要改 limits.conf。
[Service]
LimitNOFILE=100000
LimitNPROC=5000
然后:
sudo systemctl daemon-reload
sudo systemctl restart 服务名
ulimit -n 65535
ulimit -u 4096
⚠️ 退出登录即失效
su - testuser
ulimit -a
ulimit -n
ulimit -u
检查:
su - 用户名(不是 su 用户名)pam_limits.sosshd_config 影响)编辑:
sudo vim /etc/ssh/sshd_config
确保:
UsePAM yes
然后:
sudo systemctl restart sshd
| 场景 | 推荐方式 |
|---|---|
| 普通用户 | /etc/security/limits.conf |
| systemd 用户 | systemd override |
| 服务用户 | systemd service 配置 |
| 临时测试 | ulimit 命令 |
如果你能说明:
我可以给你一份完全针对你环境的配置示例。