我注意到当前离线的服务器上有 15% 的 CPU 负载。它通过 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。
有人能告诉我有关这些丑陋的查找命令的任何信息吗?是否可能是其他服务器也安装了此 /storage 引起的?
据监测,每天同一时间发生。
这看起来像是每日updatedb作业的一部分,该作业运行以更新 locate命令使用的数据库。
您可能会在
/etc/cron.daily
asmlocate
或类似文件中找到它。如果您使用
ps -ef
,您将获得可用于回溯的 PID(进程)和 PPID(父 PID)。您可能已经看到您终止的进程具有 PPID 16415、16423。像pstree这样的工具对于这种事情也很方便。
给出这样的输出
正如伊恩指出的那样,这几乎可以肯定
updatedb(8)
。updatedb
非常努力地只索引您的本地文件系统。在我的机器上,它是通过仅包含HFS 和 UFS 类型的文件系统来完成的。在您的机器上,这是通过专门排除各种文件系统类型(如 NFS、AFS、SMB 等)来完成的。正如您所注意到的,排除方法的问题在于,当有人创建新的网络文件系统类型(例如 GlusterFS)时,也
updatedb
需要进行修改以排除该类型的文件系统。对我来说,
updatedb
是一个 shell 脚本,所以我可以简单地更改文件系统类型。我怀疑您的系统也是如此。假设 GlusterFS 的类型为glusterfs
,您可能只需添加另一个测试:在其他文件系统类型的那一行测试中,并愉快地进行。
updatedb
或者,当然,如果您从不使用该locate(1)
命令,则可以完全关闭。