在 Ubuntu 中永久设置堆栈限制

在 Ubuntu 中永久设置堆栈限制

我需要永久增加 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文件。然后,每次启动其会话时,堆栈都将设置为该所需值。

相关内容