У меня есть сервер Jenkins со 140 клиентами, которые выполняют компиляцию и тестовые задания. С некоторых пор до четверти рабочих мест было убито в 21:38 +0200 с помощью SIGTERM. Каждый день в одно и то же время. Каждый день затрагивается другой набор хостов.
Мне неизвестны какие-либо изменения ни в мастере Jenkins, ни в клиентах.
С участием auditctl
, мы обнаружили исполняемый файл и пользователя процесса, который убивает наши задания: это 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
содержать любые соответствующие записи на данный момент.
Есть идеи, почему убивают мою работу? О том, как проводить дальнейшие исследования?
Это звучит как Убийца деревьев процессов Дженкинса. Когда сборка завершается, убийца дерева процессов пытается убить все процессы, связанные с этой сборкой, даже если процессы были отключены от процесса сборки и больше не являются дочерними процессами процесса сборки.
Например, у меня есть набор заданий, на которых запускаются виртуальные машины VirtualBox. Иногда мои виртуальные машины умирали случайным образом. Я покопался еще раз и обнаружил, что все виртуальные машины умерли, когда закончилась другая сборка. Как оказалось, при запуске любой команды VirtualBox VirtualBox будет искать работающий демон VirtualBox и подключаться к нему, если он существует, или запускать его, если он не существует. Убийца дерева процессов Jenkins иногда убивала демон VirtualBox при выходе из сборки, поскольку демон запускался этой сборкой.
Ваша ситуация похожа. Я подозреваю, что у вас есть работа, которая заканчивается каждый день примерно в одно и то же время, и когда она завершается, убийца дерева процессов Jenkins пожинает фоновые процессы, которые влияют на другие ваши задачи.
По ссылке выше приведены инструкции по отключению средства удаления дерева процессов для определенных заданий.