在 Debian(以及大多数 Linux 发行版)里,栈大小(stack size) 通常是由 ulimit -s 控制的。下面按常见使用场景说明如何调整。
ulimit -s
单位:KB
例如输出 8192 表示 8 MB
ulimit -s 65536
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:不能超过✅ 需要 重新登录 才生效
✅ 依赖 PAM(pam_limits.so,一般默认启用)
如果是某些程序(如 Java、Go、C++ 递归很深)需要在系统层面改:
通常不推荐改这个来调用户态栈。
如果是 systemd 服务,ulimit 不生效!
[Service]
LimitSTACK=64M
然后:
sudo systemctl daemon-reload
sudo systemctl restart your-service
查看:
systemctl show your-service | grep LimitSTACK
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),我可以给你更精确的配置示例。