温馨提示×

debian ulimit怎样配置文件

小樊
34
2026-09-01 00:43:07
栏目: 智能运维

在 Debian(及大多数 Linux 发行版)中,ulimit 用于限制 用户/进程 可使用的系统资源(如文件描述符数、进程数、内存等)。
ulimit 本身是 shell 内建命令,不能直接“写进一个配置文件长期生效”,而是要通过 PAM + limits.conf / systemd 来配置。

下面按常见场景说明。


一、临时设置(当前 shell 生效)

ulimit -n 65536      # 文件描述符
ulimit -u 4096       # 最大进程数
ulimit -a            # 查看当前限制

⚠️ 只在当前终端 / 当前会话有效,重启或重新登录失效。


二、永久生效(用户级)✅ 推荐方式

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

sudo vim /etc/security/limits.conf

示例(对用户 www 和所有用户):

# 格式:
# <domain>   <type>   <item>      <value>

*           soft    nofile      65536
*           hard    nofile      65536

www         soft    nproc       4096
www         hard    nproc       4096

常用 item:

  • nofile:打开文件数
  • nproc:进程数
  • memlock:锁内存
  • stack:栈大小

2️⃣ 确保 PAM 加载 limits

Debian 默认已启用,但需确认:

grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive

应有:

session required pam_limits.so

如果没有,手动添加。


3️⃣ 重新登录生效

logout

su - www
ulimit -a

三、systemd 服务(重点!)

⚠️ systemd 服务不会读取 limits.conf

方法 1:在 service 文件中设置

[Service]
LimitNOFILE=65536
LimitNPROC=4096

然后:

sudo systemctl daemon-reload
sudo systemctl restart your-service

方法 2:全局 systemd 限制

sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec

四、开机全局设置(不推荐但可用)

sudo vim /etc/profile.d/ulimit.sh
ulimit -n 65536
ulimit -u 4096

只对 登录 shell 有效。


五、验证

ulimit -n
ulimit -u
cat /proc/$(pidof your_app)/limits

六、常见坑总结

❌ systemd 服务不读 limits.conf
❌ Docker 容器需额外配置
❌ 硬限制不能超内核参数
❌ 修改后必须重新登录 / 重启服务


如果你能告诉我:

  • 普通用户 / 服务 / Docker / 数据库(MySQL、Redis)
  • Debian 版本

我可以给你 精确配置文件示例

0