问题
java.io.IOException: Too many open files
通过詹金斯进入solr索引。
进行了一些谷歌搜索,发现我们必须为运行作业的盒子设置 ulimit。
因此,使用 spec 在 Linux 机器上设置 ulimit
Linux x86_64 GNU/Linux
以下两种方式
ulimit -n 1000000
/etc/security/limits.conf
userx soft nofile 1000000 userx hard nofile 1000000
鉴于
- userx 是执行 jenkins 作业的用户。
- 当通过终端手动以 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 会话。