我正在尝试运行一个管道作业,该作业在我在亚马逊上动态构建的从机上运行 Scala 测试。
配置一台机器 --> 在配置的机器上构建代码 --> 运行测试
当我的测试开始时,几分钟后我遇到了“打开的文件太多”错误并且我的工作退出了。 我尝试更改从机上的限制,但在我通过 Jenkins 作业运行它时,我所做的一切似乎都被忽略了。
注意:当我从从属机器手动运行相同的命令时,它就像一个魅力,我确实看到限制是为我在系统上定义的 jenkins 用户正确定义的。
我是这样设置的(从机是CentOS 7.2)
作为 root,我更改了/etc/security/limits.conf 文件并添加:
* hard nofile 100000
* soft nofile 100000
jenkins hard nofile 100000
jenkins soft nofile 100000
我还确保/etc/security/limits.d/下没有任何内容可以覆盖这些值。 (我最初使用这些值创建了一个/etc/security/limits.d/30-jenkins.conf,但没有帮助)
我已经确定/etc/pam.d/login 有以下行:
session required pam_limits.so
重启后,我确保从 jenkins 用户运行“ulimit -a”确实显示了新值。
我创建了一个简单的管道作业:
node('master') {
stage('master-limits') {
sh('ulimit -a')
}
}
node('swarm') {
stage('slave-limits') {
sh('ulimit -a')
}
}
运行时,我得到以下输出:
[Pipeline] stage
[Pipeline] { (master-limits)
[Pipeline] sh
00:00:00.053 [ulimit-test] Running shell script
00:00:00.305 + ulimit -a
00:00:00.306 time(seconds) unlimited
00:00:00.306 file(blocks) unlimited
00:00:00.306 data(kbytes) unlimited
00:00:00.306 stack(kbytes) 8192
00:00:00.306 coredump(blocks) 0
00:00:00.306 memory(kbytes) unlimited
00:00:00.306 locked memory(kbytes) 64
00:00:00.306 process 64111
00:00:00.306 nofiles 65536
00:00:00.306 vmemory(kbytes) unlimited
00:00:00.306 locks unlimited
00:00:00.306 rtprio 0
[Pipeline] stage
[Pipeline] { (slave-limits)
[Pipeline] sh
00:00:00.348 [ulimit-test] Running shell script
00:00:00.606 + ulimit -a
00:00:00.606 time(seconds) unlimited
00:00:00.606 file(blocks) unlimited
00:00:00.606 data(kbytes) unlimited
00:00:00.606 stack(kbytes) 8192
00:00:00.606 coredump(blocks) 0
00:00:00.606 memory(kbytes) unlimited
00:00:00.606 locked memory(kbytes) 64
00:00:00.606 process 257585
00:00:00.606 nofiles 4096
00:00:00.606 vmemory(kbytes) unlimited
00:00:00.606 locks unlimited
00:00:00.606 rtprio 0
从结果中可以看出,即使我已将其更改为 100000,slave 上的限制仍显示为“4096”。
我的 swarm 插件作为服务运行并配置如下:
[Unit]
Description=Jenkins slave daemon
After=network.target
[Service]
User=jenkins
ExecStart=/usr/java/jdk1.8.0_112/bin/java -jar /var/lib/jenkins/swarm-client-3.3.jar -fsroot /var/lib/jenkins -username jenkins@jenkins.com -password * -name swarm -master http://jenkins.com -executors 1 -mode exclusive -labels swarm -disableSslVerification
ExecStop=/usr/bin/killall -w -s 2 java
[Install]
WantedBy=multi-user.target
我正在使用带有 swarm 插件的 Jenkins 2.62 按需设置从站。 我在主从上都使用 JAVA 1.8.0_112。 该问题与基于 Ubuntu 的从站或基于 CentOS 的从站一致。
我错过了什么吗?
最佳答案
在我开始阅读有关 systemd 初始化系统的内容之前,这个问题也一直困扰着我。它似乎不遵守您在/etc/security/limits.conf 文件中设置的任何限制
相反,您需要这样编辑 systemd 配置文件:
[Unit]
Description=Jenkins slave daemon
After=network.target
[Service]
User=jenkins
LimitNOFILE=100000
ExecStart=/usr/java/jdk1.8.0_112/bin/java -jar /var/lib/jenkins/swarm-client-3.3.jar -fsroot /var/lib/jenkins -username jenkins@jenkins.com -password * -name swarm -master http://jenkins.com -executors 1 -mode exclusive -labels swarm -disableSslVerification
ExecStop=/usr/bin/killall -w -s 2 java
[Install]
WantedBy=multi-user.target
在这里找到答案:https://serverfault.com/a/678861
关于linux - 使用管道的 Jenkins 奴隶忽略系统定义的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44283799/