ホーム > apache, Linux > サーバ負荷の原因を探る

サーバ負荷の原因を探る

2017 年 4 月 19 日

最近になって下書きのまま止まっている投稿記事があったので再度見直しいろいろと調べて修正してアップしました。

 

2016年9月中旬よりサーバのハングアップが多くなり色々と調べていくうちに少し原因と思われるものが見えてきました。

サーバハングアップの原因について調査する

サーバハングアップの原因について調査する その2

まず、サーバが(朝方3時とか4時とか)ハングアップしてoom-killerが発動、という流れのなかでその時間帯のアクセスなのかhttpdプロセスが増殖している事態が見受けられました。

まず初めに行ったことは、
crontabにtopコマンドを10分ごとに発行しそれをログファイルに書き込むようにしました。

# crontab -e
*/10 * * * * /usr/bin/top -b -n 2 -d 10 >> /var/log/toplog

これで細部ハングアップしている状況が確認できます。

下記がTOPコマンドの詳細ログです。

 

top - 04:49:01 up 20:40,  0 users,  load average: 74.81, 71.82, 65.32
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni,  0.0%id, 99.7%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1019952k total,   969040k used,    50912k free,     4260k buffers
Swap:  2097148k total,  1710920k used,   386228k free,    18956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1590 mysql     20   0 1341m  22m 2612 S  0.2  2.2  32:36.63 mysqld
11342 apache    20   0  302m  37m 3844 D  0.1  3.8   0:00.82 httpd
11338 apache    20   0  302m  31m 3784 D  0.1  3.2   0:00.90 httpd
   47 root      20   0     0    0    0 D  0.0  0.0   0:16.78 kswapd0
 7740 apache    20   0  303m  12m 2812 D  0.0  1.2   0:34.43 httpd
 9286 apache    20   0  299m  11m 3304 D  0.0  1.1   0:10.26 httpd
11183 apache    20   0  282m 9736 3520 D  0.0  1.0   0:01.83 httpd
11232 apache    20   0  303m 9.8m 2924 D  0.0  1.0   0:01.31 httpd
11311 postfix   20   0 81532 1144  912 D  0.0  0.1   0:00.06 pickup
11339 apache    20   0  299m  12m 3756 D  0.0  1.3   0:00.73 httpd
11353 apache    20   0  303m  30m 3820 D  0.0  3.0   0:00.80 httpd
11390 apache    20   0  275m 9408 3044 D  0.0  0.9   0:00.08 httpd
11405 root      20   0 98.6m  800  692 D  0.0  0.1   0:00.01 sadc
11410 root      20   0 15036 1268  920 R  0.0  0.1   0:00.03 top
・
・

httpdプロセスが50個くらいに増えていました。

httpdプロセスが多くなりswapファイルも食いつくしサーバで処理できなくなってoomkillerでハングアップ状態になるようです。

1行目のload averageも 74.81などととんでもない値になっています。

この時間帯に特に大きなCRONも設定せず夜中の0時~6時の間で分散しているのでCRONではないようです。

色々と毎日の負荷を見ているとhttpdプロセスが30個を越えたあたりでSWAP領域もメモリを消費してハングアップするようです。

ここで 「 apacheの同時接続数(MaxClients)を検証する 」 で説明していますが一個当たりのhttpdプロセスのメモリ使用量は、

約35557.3(35M) です。

そのためhttp.confでそのように変更しなければまたハングアップするので変更しました。

下記の設定以降(2016年10月)上記のような障害は発生しなくなりました。

他のサイトと違い、当サーバは、CPUやメモリが弱小なのでこのような設定になりました。

余裕を持って

serverlimitは、30ではなく28にしました。

もしかしたら、MaxRequestsPerChildは、もう少し大きな値でもいいのかもしれませんが安定しているのでこのまま運用してます。

**********************
参考までに現在のサーバ環境
centos6
メモリ 1 GB
ディスク HDD 100 GB
CPU 2コア

wordpress+apache+mysqlなどなど
基本的なブログサーバです
**********************

KeepAlive Off
MaxKeepAliveRequests 50
KeepAliveTimeout 10

<IfModule prefork.c>
StartServers 7
MinSpareServers 5
MaxSpareServers 10
ServerLimit 28
MaxClients 28
MaxRequestsPerChild 50
MaxMemFree 1024
</IfModule>

参考にしてみてください。また、ご指摘・質問等ありましたらコメントにてお願いします。

ちなみに半年間なにも障害等発生してません。(2016年8月3日以降起動中です。H29.4.18)

*****************************************************************************

ブログランキング・にほんブログ村へ
にほんブログ村

PVアクセスランキング にほんブログ村

カテゴリー: apache, Linux タグ:
コメントは受け付けていません。