web-dev-qa-db-ja.com

CentOS-夜間の特定の時間における高いCPU使用率

負荷が非常に少ないCentOS-5サーバーがあります。 「sar」コマンドの一般的な出力は次のようになります。

02:20:01 PM       CPU     %user     %Nice   %system   %iowait    %steal     %idle
02:30:01 PM       all      0.63      0.00      1.23      0.31      0.00     97.84
02:40:01 PM       all      0.92      0.32      1.34      0.45      0.00     96.97
02:50:01 PM       all      0.76      0.00      0.93      0.77      0.00     97.54
03:00:01 PM       all      0.41      0.00      0.72      0.15      0.00     98.72
03:10:01 PM       all      0.78      0.32      1.49      1.83      0.00     95.58
03:20:01 PM       all      0.27      0.00      0.50      0.62      0.00     98.61

ただし、毎晩午前4時10分にCPU使用率が非常に高いことを確認しています。これは、月の数日を除いてほぼ毎晩発生します。 「sar」コマンドは次のようなものを示しています。

03:00:01 AM       all      0.10      0.00      0.10      0.11      0.00     99.68
03:10:01 AM       all      0.08      0.32      0.18      0.21      0.00     99.21
03:20:01 AM       all      0.03      0.00      0.03      0.19      0.00     99.76
03:30:01 AM       all      0.01      0.00      0.02      0.06      0.00     99.91
03:40:02 AM       all      0.75      0.32      3.21     15.43      0.00     80.28
03:50:01 AM       all      0.95      0.00      3.43      9.25      0.00     86.36
04:00:01 AM       all      0.69      0.00      3.79      4.86      0.00     90.66
04:10:01 AM       all     22.38      0.54      4.47     30.92      0.00     41.69
04:20:01 AM       all      2.99      0.02      4.58      4.95      0.00     87.46
04:30:01 AM       all      0.34      0.00      0.61     13.22      0.00     85.83
04:40:01 AM       all      0.05      0.32      0.17      0.52      0.00     98.95
04:50:01 AM       all      0.22      0.00      0.36      0.11      0.00     99.32
05:00:01 AM       all      0.23      0.00      0.36      0.12      0.00     99.28

CPU使用率やiowaitなどでこのピークの原因を特定するにはどうすればよいですか。/var/log/messagesを調べましたが、特定できませんでした。その時点で実行するように設定されている他のcronジョブやその他のものはありません。これは%userの下に表示されているので、ユーザープロセスであることがわかります。原因を正確に特定するにはどうすればよいですか?

5

これは、cron.dailyスクリプトが実行されるときです...デフォルトでは、毎日午前4:00の直後に実行されます。

/etc/crontabsから

Shell=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily <-- THIS ONE!!
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

そして/etc/cron.dailyで。

犯人はおそらくあなたのmlocate.cronであり、これはupdatedbを実行し、一部のシステムでは非常に集中的になる可能性があります。

#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
7
ewwhite

/ etc/crontabに記載されているように、毎日午前4時2分に自動cron実行がスケジュールされています。

[...]
02 4 * * * root run-parts /etc/cron.daily

ls /etc/cron.daily/を実行すると、04:02AMにスケジュールされた実行中のコマンドが表示されます(これらは順番に実行されます)。実行前と実行後に負荷を出力するように簡単に変更できます。

ただし、これが標準のCentOSインストールである場合、高負荷の原因となるスクリプトがmlocate.cron、0logwatch(インストールされている場合)、またはlogrotateのいずれかである可能性が非常に高くなります。

mlocateは完全なファイルシステムスキャンを実行し(システムでのI/O待機の増加を説明します)、0logwatchはログファイルを解析し(非常に大きくなる可能性があり、I/O操作になります)、logrotateも重要なI /を作成できますoファイルシステム間でファイルを移動する場合。

4
CloudWeavers

これはほぼ毎日4:10に発生すると言っているので、大雑把な方法は、4:05から4:15まで1分ごとにcronでps auxを実行し、出力をファイルに書き込むことです。次に、CPUを使い果たしているコマンドの%CPU使用率を確認できます。

3
Aditya Patawari

Cronジョブである可能性があります-おそらく「locatedb」が更新されていますか?

夜間に独自のcron出力「ps」を追加すると、原因を特定するのに役立つ場合があります。

2
Tom Newton