我需要永久增加 Ubuntu 18.04 上的堆栈限制,以便所有用户在任何情况下都能享受新的限制。因此,使用 进行设置(ulimit -s ...
包括在 Bash 配置文件中)和类似解决方案对我来说不起作用。我试过:
- 在 中设置限制
/etc/security/limits.conf
。这没有效果。我尝试为 root 和我的用户设置硬限制和软限制。重新启动。没有任何变化。 - 设置
DefaultLimitSTACK=32768
在/etc/systemd/system.conf
和中/etc/systemd/user.conf
。32768 是所需的堆栈限制(单位为 KB)。窗口管理器在重新启动后无法加载,而是进入某种紧急 root shell,其中大多数命令也出现段错误。我将其解释为堆栈限制设置为 32KB,而不是预期的 32MB。 - 设置
DefaultLimitSTACK=33554432
和/etc/systemd/system.conf
。/etc/systemd/user.conf
系统正常加载,ulimit -s
仍然显示8192,没有任何变化。
有人能建议如何实现这个吗?谢谢!
答案1
您可以尝试在 /etc/init.d/ 目录中编写一个脚本(在其中设置 ulimit)。
/etc/init.d/ 中的脚本语法 -https://bash.cyberciti.biz/guide//etc/init.d
这些脚本在系统启动和关闭时执行[启动和停止时调用特定函数]。
答案2
首先,systemd 会忽略 ulimits 中设置的参数,请参阅https://serverfault.com/a/678861
在我的 Ubuntu 18 系统上,我使用 16mb 堆栈并将其设置在 /etc/systemd 中:
user.conf: DefaultLimitSTACK=16777216
system.conf: DefaultLimitSTACK=16777216
- 系统重新启动或注销会话以使新设置生效。然后,您可以使用
ulimit -s <value>
将用户 shell 会话的堆栈设置为等于或低于 DefaultLimitStack。
此外,您还可以添加ulimit -s 16384
到用户的.bashrc文件。然后,每次启动其会话时,堆栈都将设置为该所需值。