現在オフラインになっているサーバーの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もマウントされている他のサーバーが原因である可能性はありますか?
モニタリングによると、それは毎日同時に起こります。
これは、 locate コマンドで使用されるデータベースを更新するために実行される毎日の pdatedb ジョブの一部のようです。
おそらく/etc/cron.daily
にmlocate
などとして表示されます。
ps -ef
を使用すると、追跡に使用できるPID(プロセス)とPPID(親PID)を取得できます。あなたが殺したプロセスがPPID16415、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
_
他のファイルシステムタイプのテストのその行で、あなたの道を楽しくしてください。
または、もちろん、locate(1)
コマンドを使用したことがない場合は、updatedb
を完全にオフにすることもできます。