メモ > サーバ > 各論: トラブル対応例 > サーバが重い・サーバに繋がらない 5
サーバが重い・サーバに繋がらない 5
Apacheのログに
# tail -n 10 /var/log/httpd/error_log
[Tue Jun 21 09:54:56 2016] [notice] child pid 26477 exit signal Segmentation fault (11)
[Tue Jun 21 09:54:56 2016] [notice] child pid 26514 exit signal Segmentation fault (11)
[Tue Jun 21 09:54:56 2016] [notice] child pid 646 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 647 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 648 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 649 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 650 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 651 exit signal Segmentation fault (11)
[Tue Jun 21 09:55:07 2016] [notice] child pid 652 exit signal Segmentation fault (11)
[Tue Jun 21 09:56:22 2016] [notice] child pid 654 exit signal Segmentation fault (11)
のように出力されている場合、セグメンテーション違反が発生している。
セグメンテーション違反は
・プログラムの不具合で、大量のメモリを消費した。
・C/C++などで作成されたプログラムが、mallocで確保した領域の外など参照してはいけない領域のメモリを参照してしまった。
ときなどに発生する。
このとき、psの結果は以下のようになっていた。
ApacheがCPUをまったく消費していない(動作していない。)
# ps aux | grep httpd
apache 15313 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15314 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15315 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15316 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15317 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15318 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15319 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15320 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15321 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15322 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15323 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
apache 15324 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd
root 15393 0.0 0.0 5096 784 pts/0 S+ 10:47 0:00 grep httpd
root 30158 0.0 1.1 63360 11660 ? Ss Dec16 0:00 /usr/sbin/httpd
Apacheを再起動するとCPUが消費されるようになり、
「Segmentation fault」もなくなり、Webページにアクセスできるようになった。
# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
[root@zabbix ~]# ps aux | grep httpd
root 15408 1.8 0.9 62840 10184 ? Ss 10:47 0:00 /usr/sbin/httpd
apache 15410 3.6 2.2 70728 23264 ? S 10:47 0:00 /usr/sbin/httpd
apache 15411 0.0 0.7 63492 7764 ? S 10:47 0:00 /usr/sbin/httpd
apache 15412 0.0 0.5 62972 5432 ? S 10:47 0:00 /usr/sbin/httpd
apache 15413 0.6 1.2 64664 12996 ? S 10:47 0:00 /usr/sbin/httpd
apache 15414 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd
apache 15415 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd
apache 15416 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd
apache 15417 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd
root 15419 0.0 0.0 5092 772 pts/0 S+ 10:47 0:00 grep httpd
プログラムの不具合なら、yum update で解決するかもしれない。
もしくは依存ライブラリを差し替えるなど。
可能なら試す。
サーバの再起動で解決することもあるらしい。
「再起動によって不正な状態にあったメモリが解消された」
「再起動によって十分なメモリが確保された」
ということかもしれない。
インフラエンジニアがSegmentation fault をなんとか治してみる
http://sarface2012.hatenablog.com/entry/20101027
Cライブラリの問題などで発生することが多いようだが、
PHPで「不正なクラスを参照したために大量のメモリを消費された」場合など、
メモリ不足でも発生することがあるみたい。
CentOS6 + Apache + PHP で Segmentation fault
http://d.hatena.ne.jp/pospome/20140420/1398016279