Pages

2012年6月5日火曜日

apacheがSegmentation faultする

しゃっちょのなにぃにです。

うちのテストサーバをあるサーバに移したのですが、ある案件だけ不定期に次のログが出ることが判明しました。

[Tue Jun 05 17:05:59 2012] [notice] child pid 1524 exit signal Segmentation fault (11)
仕方ないので、バックトレースから何が悪さしているのかを調べてみた。
まず、通常のapacheはマルチプロセスで動いているので止めます。(Ubuntuで動いてます)
/etc/init.d/apache stop
次に、/etc/apache2/apache2.confのファイルの書き換えです。
理由は、Ubuntuの場合、起動スクリプトで設定値を埋め込んでるので、その読み込みを静的データで置き換えます。
具体的には、次の通り
User ${APACHE_RUN_USER} -> User www-data
Group ${APACHE_RUN_GROUP} -> Group www-data
その後、gdbからapacheを起動します。
root@xxxxxx:~# gdb apache2
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /usr/sbin/apache2...done.
(gdb) run -X -f /etc/apache2/apache2.conf
Starting program: /usr/sbin/apache2 -X -f /etc/apache2/apache2.conf
[Thread debugging using libthread_db enabled]
[New Thread 0xb489bb70 (LWP 2204)]
[Thread 0xb489bb70 (LWP 2204) exited]
不定期に症状がでるので、Segmentation fault起すまでアクセスする。
んで、起こした結果、バックトレースを表示させる。
Program received signal SIGSEGV, Segmentation fault.
0xb675a400 in ?? () from /usr/lib/php5/20090626+lfs/pgsql.so
(gdb) bt
#0 0xb675a400 in ?? () from /usr/lib/php5/20090626+lfs/pgsql.so
#1 0xb78c39d4 in zend_hash_clean () from /usr/lib/apache2/modules/libphp5.so
#2 0xb67624a0 in ?? () from /usr/lib/php5/20090626+lfs/pgsql.so
#3 0xb78b8970 in ?? () from /usr/lib/apache2/modules/libphp5.so
#4 0xb78c35a8 in zend_hash_reverse_apply () from /usr/lib/apache2/modules/libphp5.so
#5 0xb78b71b1 in ?? () from /usr/lib/apache2/modules/libphp5.so
#6 0xb785b9f5 in php_request_shutdown () from /usr/lib/apache2/modules/libphp5.so
#7 0xb7948e6c in ?? () from /usr/lib/apache2/modules/libphp5.so
#8 0x00148291 in ap_run_handler (r=0x6aa400) at /build/buildd/apache2-2.2.14/server/config.c:159
#9 0x0014c077 in ap_invoke_handler (r=0x6aa400) at /build/buildd/apache2-2.2.14/server/config.c:373
#10 0x0015b9a8 in ap_process_request (r=0x6aa400) at /build/buildd/apache2-2.2.14/modules/http/http_request.c:282
#11 0x001584d8 in ap_process_http_connection (c=0x50fb48) at /build/buildd/apache2-2.2.14/modules/http/http_core.c:190
#12 0x00150b01 in ap_run_process_connection (c=0x50fb48) at /build/buildd/apache2-2.2.14/server/connection.c:43
#13 0x0016163a in child_main (child_num_arg=) at /build/buildd/apache2-2.2.14/server/mpm/prefork/prefork.c:662
#14 0x00161971 in make_child (s=, slot=0) at /build/buildd/apache2-2.2.14/server/mpm/prefork/prefork.c:702
#15 0x001620ff in ap_mpm_run (_pconf=0x17b0a8, plog=0x1ad170, s=0x17f8e8)
at /build/buildd/apache2-2.2.14/server/mpm/prefork/prefork.c:978
#16 0x00132a92 in main (argc=4, argv=0xbffff8d4) at /build/buildd/apache2-2.2.14/server/main.c:742
(gdb) quit
とまぁ、PHPのpgsql.soでエラーが出てることに。
原因の場所を特定した所で、今回はおしまい。

おそらく、うちの新人エンジニア君が構築時に何かやらかしてる気がする。
気になるのは、読み込んでいるpgsql.soのディレクトリがなぜその日付???って所。
変なパッケージ他所から拾ってきて突っ込んでんじゃないかなぁ…

0 件のコメント:

コメントを投稿