Назад | Перейти на главную страницу

Странные процессы на сервере потребляют процессор

Я заметил 15% загрузку ЦП на сервере, который в настоящее время отключен. Он смонтировал том GlusterFS через TCP. Просматривая верхнюю часть, он показал мне, что это glusterfs. После этого я попытался понять, что именно использует, и получил следующее:

# lsof /storage/
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF                NODE NAME
find    16433 nobody  cwd    DIR   0,19     8192 9259265867489333824 /storage/200000/200000/200700/200704/08

Затем:

# ps uax | grep find
root     16415  0.0  0.0   4400   724 ?        SN   06:34   0:00 /bin/sh /usr/bin/updatedb.findutils
root     16423  0.0  0.0   4400   336 ?        SN   06:34   0:00 /bin/sh /usr/bin/updatedb.findutils
nobody   16431  0.0  0.0  39524  1376 ?        SN   06:34   0:00 su nobody -s /bin/sh -c /usr/bin/find / -ignore_readdir_race      \( -fstype NFS -o -fstype nfs -o -fstype nfs4 -o -fstype afs -o -fstype binfmt_misc -o -fstype proc -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype shfs -o -fstype sysfs -o -fstype cifs -o -fstype lustre_lite -o -fstype tmpfs -o -fstype usbfs -o -fstype udf -o -fstype ocfs2 -o      -type d -regex '\(^/tmp$\)\|\(^/usr/tmp$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/alex$\)\|\(^/var/spool$\)\|\(^/sfs$\)\|\(^/media$\)\|\(^/var/lib/schroot/mount$\)' \) -prune -o -print0
nobody   16432  0.0  0.0   4400   616 ?        SN   06:34   0:00 sh -c /usr/bin/find / -ignore_readdir_race      \( -fstype NFS -o -fstype nfs -o -fstype nfs4 -o -fstype afs -o -fstype binfmt_misc -o -fstype proc -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype shfs -o -fstype sysfs -o -fstype cifs -o -fstype lustre_lite -o -fstype tmpfs -o -fstype usbfs -o -fstype udf -o -fstype ocfs2 -o      -type d -regex '\(^/tmp$\)\|\(^/usr/tmp$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/alex$\)\|\(^/var/spool$\)\|\(^/sfs$\)\|\(^/media$\)\|\(^/var/lib/schroot/mount$\)' \) -prune -o -print0
nobody   16433  0.3  0.0  13612  1532 ?        SN   06:34   0:38 /usr/bin/find / -ignore_readdir_race ( -fstype NFS -o -fstype nfs -o -fstype nfs4 -o -fstype afs -o -fstype binfmt_misc -o -fstype proc -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype shfs -o -fstype sysfs -o -fstype cifs -o -fstype lustre_lite -o -fstype tmpfs -o -fstype usbfs -o -fstype udf -o -fstype ocfs2 -o -type d -regex \(^/tmp$\)\|\(^/usr/tmp$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/alex$\)\|\(^/var/spool$\)\|\(^/sfs$\)\|\(^/media$\)\|\(^/var/lib/schroot/mount$\) ) -prune -o -print0

Я убил 16432 и 16433, и теперь ЦП снова% 0.

Может кто-нибудь рассказать мне что-нибудь об этих уродливых командах поиска? Возможно ли, что это вызвано другим сервером, на котором также установлено это / хранилище?

По данным мониторинга, это происходит каждый день в одно и то же время.

Похоже, это часть повседневной обновленоb задание, которое выполняется для обновления баз, используемых найти команда.

Вы, вероятно, найдете это в /etc/cron.daily так как mlocate или похожие.

Если вы используете ps -ef вы получаете PID (процесс) и PPID (родительский PID), которые можно использовать для обратного отслеживания. Вы, наверное, заметили, что убитые вами процессы имеют PPID 16415, 16423.

Такие инструменты, как pstree полезны и для такого рода вещей.

pstree -p -H5295

дает такой вывод

  |-sshd(5291)---sshd(5294)---bash(5295)-+-more(6098)
  |                                      `-pstree(6097)

Как заметил Иэн, это почти наверняка updatedb(8). updatedb очень старается индексировать только ваши локальные файловые системы. На моей машине это делается только включая файловые системы типа HFS и UFS. На вашем компьютере это делается специально без учета различные типы файловых систем, такие как NFS, AFS, SMB и т.п.

Проблема с подходом исключения, как вы заметили, заключается в том, что когда кто-то создает новый тип сетевой файловой системы - например, GlusterFS - updatedb необходимо изменить, чтобы исключить этот тип файловой системы.

Для меня, updatedb это сценарий оболочки, поэтому я могу легко изменить типы файловой системы. Я подозреваю, что это верно и для вашей системы. Предполагая, что GlusterFS имеет тип glusterfs, вы, вероятно, можете просто добавить еще один тест:

-fstype glusterfs

в этой строке тестов для других типов файловых систем и желаю вам счастья.

Или, конечно, можно было просто выключить updatedb полностью, если вы никогда не используете locate(1) команда.