geek.conf.2

あるエンジニアの備忘録

AM4:00の悪事

さて久しぶりのシステム運用系の記事ですが、

今回私が管理するシステムがロードアベレージが20以上になってしまい、なんで?を
調査しているときに起こりました!

挙動的にメモリがswapしてDisk I/O頻度が高まりCPUが活発になっちゃうっていう
ベタな展開でしたが、リソースの増強をするべきなのか、非効率にリソースを消費
していないか原因を探るため、sysstatに含まれるシステム情報ツールsarで取得する情報や
topコマンド結果から調査しました。

この時、AM4:00にCPU使用がドーンと増えていることを確認しました。
疑うべきはバックアップやウィルスアップデート/検知が走っていないか?ですが走っていなく
それ以外の何かが走りCPUを動かしていることが分かりました。


ここでcronについて書きますが、/etc/crontabを見ると

・毎時1分にcron.hourly
・4時2分にcron.daily
・日曜の4時22分にcron.weekly
・毎月1日の4時42分にcron.monthly

を実行します。

事象に該当するのは毎日4時ごろ起こります。
ふむ、そうです、/etc/cran.daily/slocate.cronです。
topコマンド結果を見るとupdatedbなるプロセスが当該の時間に上がっていますなんだこりゃ??



みなさんlocateコマンドって知ってますか?これfindコマンドよりも高速にファイル検索を実行する
コマンドです。
なんかslocate.cronでupdatedbコマンドを実行してlocateコマンドで用いるファイル名データベース
をディスクアクセスによって更新しているようなのですよ。
locateコマンド実行時はこのデータベースをキャッシュして実際にディスクアクセスせずに高速検索
を可能としているようなのです。

まぁこれredhatlinuxには当てはまると思います。
普通はCPU使用ドーンてなることはないのですが、外付けで巨大容量のストレージとかある日には、そりゃ
CPUも使いますよね?
本システムは巨大ストレージが宿っていました。。

さーてlocateコマンドなど使いませんが、一応巨大ストレージ領域は検索する必要はないため以下のように
除外するファイルのパスを書いてやります。

/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e "/jogai/suru/path1,/jogai/suru/path2"

  • eオプションで検索DBを作成する必要のないファイルのパスを除外しています。

検索DBを更新する必要がなければ上記部分をコメントアウトしても良いですね。

あ、ちなみにロードアベレージが20以上と高負荷になってしまう原因はこれではなく、常駐アプリがメモリを蝕んでいたためでしたよっと。


お・わ・り&heart