専用サーバーのロゴ

Q&Aトップへ戻る

■過負荷でサーバが落ちた

以下、コマンドラインでの操作です。
まずは 過負荷が発生している時点で

# ps -ax

として状況判断。
見てもよく分からなかった人。以下のコマンドでどれが負荷をかけているかまず把握して下さい。

#top

把握できたら・・・・
以下のコマンドでログファイルがどこにあるか探して下さい。○○には負荷のかかっているサービス名の一部を入力。

#locate log | grep ○○

たぶん出てくると思いますが、出てこなかったら
/var/log/ や /etc/httpd/logs/ にいろいろなログが残っているので見て下さい。


このように誰が負荷をかけているか調べなくてはなりません。
CGIが問題の場合なら上記のtopやps axlなどのコマンドで、どのCGIが負荷をかけているか分かります。
しかしPHPの場合はtop や ps axl などを使ってもhttpdとしか表示されませんので原因のスクリプトを探すのは容易ではありません

そんなとき簡単な方法として、
SSHを2つ立ち上げて、一つは#top で負荷状況の把握、もう片方で一部のディレクトリのパーミッションを

# chmod 500 /home/a*/public_html

とかにしてみて下さい。( * はワイルドカード。なんでも当てはまる と言う意味。この場合はaではじまるユーザ名のドキュメントルート(public_html)を 500にしてみました。

これでaではじまるユーザ名のWEBは見られなくなったことでしょう。
topコマンドのCPU負荷は減りましたか?
減らないようならパーミッションを 701 にもどして下さい。

# chmod 701 /home/a*/public_html

つぎに b、 c、d・・・・・と進めて、負荷が無くなったところが問題の過負荷ユーザです。
また755に戻して、○ではじまるユーザ一人ずつパーミッションを500に変更して個別に調査してください。
ユーザ名が特定できたらユーザに警告入れて、一旦、ユーザを停止。 じっくりと詳しく見ていくだけです。 
あと、直近のログをtailで表示し、grepでいろいろ抜き出してみるのも有効な手段です。

例)
tail /home/*/log/*access_log | grep "○○○"


その他の負荷対策:DNSラウンドロビン

http://senyou.plus-server.net/topic.php?go=topic&num=46

 

 

カテゴリ 『 サーバー操作等(運用後) 』を全部表示