服务器上的奇怪进程消耗 CPU

服务器上的奇怪进程消耗 CPU

我注意到服务器上的 CPU 负载为 15%,目前处于离线状态。它已通过 TCP 安装了 GlusterFS 卷。查看顶部,它显示它是 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,现在 CPU 又是 %0。

有人能告诉我有关这些丑陋的 find 命令的任何信息吗?这是否可能是由其他也安装了此 /storage 的服务器造成的?

据监测,这类事件每天都会在同一时间发生。

答案1

这看起来像是日常的一部分更新数据库运行该作业来更新 定位命令。

您可能会在/etc/cron.dailyasmlocate或类似内容中找到它。

如果您使用,ps -ef您将获得可用于追溯的 PID(进程)和 PPID(父 PID)。您可能已经看到您杀死的进程的 PPID 为 16415、16423。

类似的工具pstree对于这种事情也很方便。

pstree -p -H5295

给出这样的输出

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

答案2

正如 Iain 所说,几乎可以肯定的是updatedb(8)updatedb它非常努力地只索引你的本地文件系统。在我的计算机上,它只通过包括HFS 和 UFS 类型的文件系统。在你的机器上,它通过专门排除各种文件系统类型,如 NFS、AFS、SMB 等。

正如您所注意到的,排除方法的问题在于,当有人创建新的网络文件系统类型(例如 GlusterFS)时,updatedb也需要进行修改以排除该类型的文件系统。

对我来说,updatedb是一个 shell 脚本,因此我可以轻易更改文件系统类型。我怀疑您的系统也是如此。假设 GlusterFS 的类型为glusterfs,您可能只需添加另一个测试:

-fstype glusterfs

在该行针对其他文件系统类型的测试中,您可以愉快地继续您的旅程。

或者,当然,updatedb如果您从不使用该locate(1)命令,您可以完全关闭。

相关内容