web-dev-qa-db-ja.com

サーバー上の奇妙なプロセスは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です。

誰かがこれらの醜い検索コマンドについて何か教えてもらえますか?この/ storageもマウントされている他のサーバーが原因である可能性はありますか?

モニタリングによると、それは毎日同時に起こります。

5
Roman Newaza

これは、 locate コマンドで使用されるデータベースを更新するために実行される毎日の pdatedb ジョブの一部のようです。

おそらく/etc/cron.dailymlocateなどとして表示されます。

ps -efを使用すると、追跡に使用できるPID(プロセス)とPPID(親PID)を取得できます。あなたが殺したプロセスがPPID16415、16423を持っているのを見たことがあるでしょう。

pstree のようなツールは、この種のことにも便利です。

pstree -p -H5295

このような出力を与えます

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

イアンが指摘したように、それはほぼ確実にupdatedb(8)です。 updatedbは、ローカルファイルシステムにのみインデックスを付けるように一生懸命努力しています。私のマシンでは、HFSおよびUFSタイプの含むファイルシステムによってのみ実行されます。あなたのマシンでは、それは具体的に除く NFS、AFS、SMBなどのようなさまざまなファイルシステムタイプによって行われます。

お気づきのように、除外アプローチの問題は、誰かが新しいネットワークファイルシステムタイプ(たとえばGlusterFSなど)を作成するときに、そのタイプのファイルシステムも除外するようにupdatedbを変更する必要があることです。

私にとって、updatedbはシェルスクリプトなので、ファイルシステムの種類を簡単に変更できます。それはあなたのシステムにも当てはまると思います。 GlusterFSのタイプがglusterfsであると仮定すると、おそらく別のテストを追加することができます。

_-fstype glusterfs
_

他のファイルシステムタイプのテストのその行で、あなたの道を楽しくしてください。

または、もちろん、locate(1)コマンドを使用したことがない場合は、updatedbを完全にオフにすることもできます。

3
Edward Thomson