温馨提示×

Debian ulimit临时修改方法

小樊
52
2026-07-23 21:10:50
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制当前 shell 及其子进程的资源使用。下面按临时修改的常见场景说明。


一、临时修改(仅对当前 shell / 当前会话有效)

1️⃣ 查看当前限制

ulimit -a

常用单项查看:

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

2️⃣ 临时修改(当前 shell 立即生效)

直接在终端执行:

ulimit -n 65535
ulimit -u 4096

⚠️ 注意:

  • 只对当前 shell 有效
  • 不能超出系统硬限制(hard limit)
  • 重新登录或新开终端会失效

3️⃣ 临时修改 hard limit(需要 root)

普通用户只能调低 hard limit,不能调高。

切换到 root:

sudo -i

修改 hard limit:

ulimit -Hn 100000
ulimit -Sn 65535

说明:

  • -H:hard limit(上限)
  • -S:soft limit(当前生效)

二、只对某条命令临时生效

(sh -c "ulimit -n 65535 && ./your_program")

或在脚本中:

#!/bin/bash
ulimit -n 65535
./your_program

三、临时修改 systemd 服务的 ulimit(常见坑)

⚠️ systemd 会忽略 ulimit 设置

临时方式(重启后失效):

systemctl edit servicename

写入:

[Service]
LimitNOFILE=65535

然后:

systemctl restart servicename

查看是否生效:

cat /proc/$(pidof servicename)/limits

四、验证修改是否成功

ulimit -n
cat /proc/$$/limits

五、常见错误说明

bash: ulimit: open files: cannot modify limit: Operation not permitted

  • 当前用户尝试超过 hard limit
  • 或 systemd 限制了上限

❌ ulimit 修改后程序没变

  • 程序是 systemd 启动的
  • 或已经启动的进程不受新 ulimit 影响

六、一句话总结

场景 方法
当前 shell 临时改 ulimit -n 65535
root 临时提上限 ulimit -Hn 100000
服务临时改 systemctl edit + LimitNOFILE
永久修改 /etc/security/limits.conf

如果你有具体场景(如 MySQL / Nginx / Docker / 高并发服务),我可以给你最合适、最安全的修改方案

0