ulimit 未反映在 jenkins 从属进程中

ulimit 未反映在 jenkins 从属进程中

问题

java.io.IOException: Too many open files通过詹金斯进入solr索引。

进行了一些谷歌搜索,发现我们必须为运行作业的盒子设置 ulimit。

因此,使用 spec 在 Linux 机器上设置 ulimit

Linux x86_64 GNU/Linux

以下两种方式

  1. ulimit -n 1000000

  2. /etc/security/limits.conf

    userx soft nofile 1000000
    userx hard nofile 1000000
    

鉴于

  1. userx 是执行 jenkins 作业的用户。
  2. 当通过终端手动以 userx 身份对盒子进行 ssh 并检查ulimit -n是否10000000

问题

但是当通过 jenkins 作业执行相同的 ulimit -n 时,只能获得默认值 1024。

任何建议都会有帮助吗?

答案1

如果您的 jenkins 启动脚本使用“su”进行用户切换,请确保为 su 启用了 pam_limits.so。

对于 Ubuntu Server,取消注释 /etc/pam.d/su 文件中的“session required pam_limits.so”行

sudo sed -i '/# session\s\+required\s\+pam_limits.so/ s/# *//' /etc/pam.d/su

答案2

默认情况下,Jenkins 以 userx 身份与每个 Node/Slave 建立 SSH 连接。

我设置了 ulimit,使节点脱机并将其恢复,我认为问题出在会话方面。

因此,Disconnect从 jenkins 中删除了整个节点,并重新启动了与它的连接。它为 userx 带来了一个新的会话,显然它起作用了。

我的错,当我将节点离线时,我没有查看日志。

请记住:将 Jenkins 节点脱机并恢复不会启动新的 SSH 会话。

相关内容