我有一台 Jenkins 服务器,上面有 140 个客户端,用于执行编译和测试作业。有些天以来,大约四分之一的作业在 21:38 +0200 因 SIGTERM 而被终止。每天都是同一时间。每天都有不同的主机受到影响。
我不知道 Jenkins 主服务器或客户端有任何变化。
使用auditctl
,我们找到了杀死我们作业的进程的可执行文件和用户:它是属于 Jenkins 用于登录客户端的用户的 java 进程。但是,它的寿命很短。它不在我在 21:38 之前和之后转储的进程列表中。它的父进程也不在。
这就是它audit
的样子。
time->Mon Jun 25 21:38:05 2018
type=PROCTITLE msg=audit(1529955485.892:7806):
proctitle=6A617661002D6A6172002F6F7074[...]
type=OBJ_PID msg=audit(1529955485.892:7806): opid=11583 oauid=1608
ouid=1608 oses=411 ocomm="java"
type=SYSCALL msg=audit(1529955485.892:7806): arch=c000003e syscall=62
success=yes exit=0 a0=2d3f a1=0 a2=a a3=2d3f items=0 ppid=29509 pid=29521
auid=1608 uid=1608 gid=20 euid=1608 suid=1608 fsuid=1608 egid=20 sgid=20
fsgid=20 tty=(none) ses=411 comm="java" exe="/usr/lib/jvm/java-1.8.0-
openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/java" key=(null)
目前/var/log/messages
,/var/log/cron
和 均不包含任何相关条目。/var/log/secure
您对我的作业被终止的原因有什么想法吗?如何进行进一步研究?
答案1
这听起来像Jenkins 进程树杀手。当一个构建退出时,进程树终止程序会尝试终止与该构建相关的所有进程,即使这些进程已与构建进程脱离关系并且不再是构建进程的子进程。
例如,我有一组运行 VirtualBox VM 的作业。有时我的 VM 似乎会随机死亡。我进一步研究后发现,当另一个构建完成时,所有 VM 都会死亡。事实证明,在运行任何 VirtualBox 命令时,VirtualBox 都会查找正在运行的 VirtualBox 守护进程并连接到它(如果存在)或启动它(如果不存在)。Jenkins 进程树终止程序有时会在构建退出时终止 VirtualBox 守护进程,因为该守护进程是由该构建启动的。
你的情况听起来很相似。我怀疑你有一份工作每天大约在同一时间完成,当它完成时,Jenkins 进程树杀手正在收割影响你其他工作的后台进程。
上面的链接中有关于如何禁用特定作业的进程树终止程序的说明。