1.ターミナルでサーバーにログインできるか。
poderosaを使用。サーバーにログインできるのであればサーバー自体は問題ないの判断。
2.HTTPサーバー(apache)は起動しているか確認。
———————————
service httpd status
———————————
もしくは
———————————
/etc/init.d/httpd status
———————————
/etc/init.dディレクトリ → デーモンを起動するためのファイル(起動スクリプト = rcスクリプト)が置いてある
rc は run command
結果(起動している場合)
———————————
httpd (pid 1759) を実行中…
———————————
2.HTTPサーバー(apache)が起動しているか確認。
———————————
# service httpd status
———————————
もしくは
———————————
# /etc/init.d/httpd status
———————————
/etc/init.dディレクトリ → デーモンを起動するためのファイル(起動スクリプト = rcスクリプト)が置いてある
rc は run command
結果(起動している場合)
———————————
httpd (pid 1759) を実行中…
———————————
3.mysql が起動しているか確認。
———————————
# service mysqld status
———————————
もしくは
———————————
# /etc/init.d/mysqld status
———————————
結果(起動している場合)
———————————
mysqld (pid 1634) を実行中…
———————————
apache は起動しているが mysql が落ちている時に、ページにアクセスすると php のエラーが出る
———————————————————–
Warning: mysql_set_charset(): No such file or directory in /var/www/libs/~~~~
Warning: mysql_set_charset(): A link to the server could not be established in /var/www/~~~~~
ConnectError!DB Error: connect failed
———————————————————–
この場合は、mysqld を再起動などする
———————————————————–
sudo /etc/init.d/mysqld restart
———————————————————–
4.webサービスに繋がらない原因はアクセス過多の場合が多いので現在のhttpdのプロセス数を確認する
———————————————————–
ps aux |grep httpd |wc -l
65
———————————————————–
この数字が http.cnf の ServerLimit を超えるとサーバーが停止する。
———————————————————–
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
———————————————————–
エラーログにもエラーが出る。
エラーログを調べる
———————————————————–
cat /var/log/httpd/error_log
———————————————————–
エラーログ一部抜粋
——————————————————————————
[Fri Aug 27 01:28:32 2021] [error] server reached MaxClients setting, consider raising the MaxClients setting
——————————————————————————
OS のエラーを調べると、上記エラーが出た時間の前後に oom-killer が発動しているのが分かる
———————————————————–
cat /var/log/messages | grep oom
———————————————————–
一部抜粋
———————————————————–
Oct 6 02:24:02 hostname kernel: httpd invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
Oct 6 02:24:02 hostname kernel: [] ? oom_kill_process+0x82/0x2a0
Oct 6 02:24:02 hostname kernel: [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name
———————————————————–
oom-killer が発動したときにサーバーに再起動が起こるように設定する
OOM発動時にサーバーを再起動
エラーログで不具合が起きたらしい時間帯のアクセスログを調べる場合は
———————————————————–
cat /var/log/httpd/○○_access_log | awk -F – ‘”0:00:00″ < $5 && $5 <= “15:00:00″‘
———————————————————–
$5 の部分はアクセスログに書かれた時間の位置で、$4 だったり数字を変える。
5.ネットワークの状態も確認する
———————————————————–
# netstat -tpn
———————————————————–
netstat で同じipアドレスからのたくさんの重複アクセスを確認したので、対策として mod_evasiveをインストールした
その時の記事
ただしあまり効果が感じられない。インストールしてもサーバーは止まるし、ipを遮断したらメールが来る設定にしているが遮断条件に満たなくてメールがあまり来ない。
ipアドレス別でサーバーに接続している数を調べる
———————————————————–
# netstat -tan | awk ‘{print $5}’ | cut -d : -f1 | sort -n | uniq -c | sort -n
———————————————————–
———————————————————–
37 66.249.68.××
42 157.55.39.××
42 40.77.167.××
43 157.55.39.××
45 207.46.13.××
51 66.249.68.××
2256 207.××.××.××
———————————————————–
207.××.××.×× が異常な接続数なので ipアドレスを解析してクローラーでなければ ipアドレスを拒否する
netstat で大量のCLOSE_WAITを確認。その時に行った対策のメモ