You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何永久设置WSL2 Ubuntu的栈大小限制

如何永久设置WSL2 Ubuntu的栈大小限制

我来帮你解决这个WSL2里栈大小永久设置的问题,你遇到的情况其实挺典型的——临时设置有效、/etc/security/limits.conf不生效、su到自己时反而正常,核心原因是WSL2的shell启动流程和常规Ubuntu服务器不太一样。

方案一:修复PAM配置让limits.conf生效

WSL2默认可能没有在shell启动时加载PAM的limits模块,这就是你修改/etc/security/limits.conf后没效果的关键原因;而su user时会触发完整的PAM认证流程,所以配置能正常生效。你可以按以下步骤操作:

  • 编辑PAM的通用会话配置文件:
    sudo nano /etc/pam.d/common-session
    
  • 确保文件中存在这一行(如果没有,就添加到文件合适的位置):
    session required pam_limits.so
    
  • 保存退出后,重启WSL(在Windows命令提示符或PowerShell里执行wsl --shutdown,然后重新打开Ubuntu终端),再执行ulimit -a查看栈大小,应该就显示为unlimited了。

方案二:全局shell配置覆盖(兼容所有shell类型)

如果上面的PAM方案没起作用,或者你想更直接地覆盖所有shell实例(包括非交互式shell),可以用全局shell配置的方式:

  • /etc/profile.d/目录下创建一个专门的配置脚本,这个目录里的脚本会被所有登录自动加载:
    sudo nano /etc/profile.d/set_stack_limit.sh
    
  • 在脚本里写入:
    ulimit -s unlimited
    
  • 保存退出后,重启WSL或者重新登录,不管是交互式shell还是非交互式shell(比如执行脚本时的shell),栈大小都会被设置为unlimited。

补充说明

  • 为什么.bashrc只对交互式shell有效?因为bash默认只有在交互式模式下才会加载.bashrc文件,非交互式shell(比如运行脚本时的后台shell)不会读取这个文件,所以无法生效。
  • su user能生效的原因是,su命令会触发完整的PAM认证流程,强制加载了pam_limits.so模块,从而读取了/etc/security/limits.conf里的配置。

备注:内容来源于stack exchange,提问作者nograpes

火山引擎 最新活动