温馨提示×

debian ulimit栈大小如何调

小樊
38
2026-09-25 05:59:42
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)里,栈大小(stack size) 通常是由 ulimit -s 控制的。下面按常见使用场景说明如何调整。


一、查看当前栈大小

ulimit -s

单位:KB
例如输出 8192 表示 8 MB


二、临时调整(当前 shell 及子进程)

1️⃣ 调大栈大小(如 64MB)

ulimit -s 65536

2️⃣ 不限制(不推荐,容易 OOM)

ulimit -s unlimited

⚠️ 只对当前 shell 及其子进程有效,重启或新登录失效。


三、永久调整(用户级)

方法一:/etc/security/limits.conf

编辑:

sudo vim /etc/security/limits.conf

示例(对用户 tom):

tom    soft    stack    65536
tom    hard    stack    131072
  • soft:用户可自己调
  • hard:不能超过
  • 单位:KB

✅ 需要 重新登录 才生效
✅ 依赖 PAM(pam_limits.so,一般默认启用)


四、系统级启动参数(不常用)

如果是某些程序(如 Java、Go、C++ 递归很深)需要在系统层面改:

1️⃣ GRUB(影响内核线程,一般不用)

通常不推荐改这个来调用户态栈。


五、systemd 服务如何改栈大小

如果是 systemd 服务,ulimit 不生效!

方法:在 service 文件中加

[Service]
LimitSTACK=64M

然后:

sudo systemctl daemon-reload
sudo systemctl restart your-service

查看:

systemctl show your-service | grep LimitSTACK

六、程序级(C / C++)

1️⃣ 编译时指定栈大小(不常用)

2️⃣ 运行前设置环境变量(线程栈)

export PTHREAD_STACK_MIN=8388608

七、常见坑

❌ ulimit 只对 新进程 有效
❌ sudo 会重置 ulimit(除非加 -E 或配置 sudoers)
❌ Docker 容器默认继承宿主 ulimit,可在 docker run 指定:

docker run --ulimit stack=65536 your-image

八、快速总结

场景 方法
临时 ulimit -s 65536
用户永久 /etc/security/limits.conf
systemd LimitSTACK=
Docker --ulimit stack=

如果你能说明 具体场景(比如:Java / C++ / 多线程 / 服务 / Docker),我可以给你更精确的配置示例。

0 踩