我正在尝试运行一个管道作业,在我在亚马逊上动态构建的从属机器上运行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,对奴隶的限制仍显示为“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
我正在使用Jenkins 2.62和swarm插件来按需设置从属设备。 我在主服务器和从服务器上都使用JAVA 1.8.0_112。 该问题与基于Ubuntu的从站或基于CentOS的从站一致。
我错过了什么吗?
答案 0 :(得分:1)
在我开始阅读有关systemd init系统之前,这个问题也没有找到。它似乎不尊重您在/etc/security/limits.conf文件中设置的任何限制
相反,您需要编辑systemd配置文件:
<div class="items">
<div class="item">Item 1 with text</div>
<div class="item">Item 2 with more text</div>
<div class="item">Item 3 with some text</div>
<div class="item">Item 4 without text</div>
<div class="item">Item 5 lorem</div>
<div class="item">Item 6 ipsum</div>
<div class="item">Item 7 with lorem</div>
<div class="item">Item 8 with ipsum</div>
</div>
在这里找到答案:https://serverfault.com/a/678861