ApacheのSegmentationエラーをデバックする

 サーバーを移行したとき、WEBページの一部で表示ができない状態になりました。ブラウザで特定のページにアクセスすると「接続がリセットされました」となります。全てのブラウザで同じ状態になりました。エラーになった場所は、Wordpressの管理ページ内の新規プラグインインストールページです。
 Apacheのエラーログで内容を確認すると、「Segmentation false」となっていました。

[root@localhost ~]# tail -n 50 /usr/local/apache2/logs/error_log
[Sat Nov 29 18:55:38 2014] [notice] child pid 59914 exit signal Segmentation fault (11), possible coredump in /tmp

 Segmentationエラーとは、メモリー上で不具合が起きた時に発生するエラーです。デバックの方法は、coreファイルを出力し、gdbでデバックします。

1. coreファイルの出力
coreファイルを出力すためには、容量が制限がされているかどうか確認をします。制限がされている場合は、制限を解除します。

「ulimit」コマンドで制限の確認
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0 ←制限されている

制限解除するためファイルを編集する。ファイルの最後に追記しました。
[root@localhost ~]# vi /etc/profile
ulimit -c unlimited > /dev/null 2>&1

[root@localhost ~]# vi /etc/security/limits.conf
root soft core 65536
apache soft core 65536

「ulimit」コマンドで制限の確認
[root@localhost ~]# ulimit -a
core file size (blocks, -c) unlimited ←解除されている

2. Apacheの設定
 coreファイルの出力場所を指定します。Apacheの設定ファイル「httpd.conf」の最後に追記します。
[root@localhost ~]# vi /usr/local/apache2/conf/httpd.conf
CoreDumpDirectory /tmp

3. gdbでデバック
[root@localhost ~]# gdb /usr/local/apache2/bin/httpd -c /tmp/core.59929
(gdb) where

coreファイルのエラー内容

#0 0x00007f7cd2432e9c in sqlite3_file_control () from /usr/lib64/libsqlite3.so.0
#1 0x00007f7cd26c7c40 in ?? () from /usr/lib64/libsoftokn3.so
#2 0x00007f7cd26c83ab in ?? () from /usr/lib64/libsoftokn3.so
#3 0x00007f7cd26cd656 in ?? () from /usr/lib64/libsoftokn3.so
#4 0x00007f7cd26b494b in ?? () from /usr/lib64/libsoftokn3.so
#5 0x00007f7cd26b4c5e in ?? () from /usr/lib64/libsoftokn3.so
#6 0x00007f7cd26b5086 in ?? () from /usr/lib64/libsoftokn3.so
#7 0x00007f7cd26b5149 in ?? () from /usr/lib64/libsoftokn3.so
#8 0x000000374f237d17 in ?? () from /usr/lib64/libnss3.so
#9 0x000000374f238697 in ?? () from /usr/lib64/libnss3.so
#10 0x000000374f24bf9a in SECMOD_LoadModule () from /usr/lib64/libnss3.so
#11 0x000000374f24c090 in SECMOD_LoadModule () from /usr/lib64/libnss3.so
#12 0x000000374f24c090 in SECMOD_LoadModule () from /usr/lib64/libnss3.so
#13 0x000000374f21adb4 in ?? () from /usr/lib64/libnss3.so
#14 0x000000374f21b581 in NSS_InitContext () from /usr/lib64/libnss3.so
#15 0x000000378c440823 in ?? () from /usr/lib64/libcurl.so.4
#16 0x000000378c440a06 in ?? () from /usr/lib64/libcurl.so.4
#17 0x000000378c438735 in Curl_ssl_connect () from /usr/lib64/libcurl.so.4
#18 0x000000378c41718b in Curl_http_connect () from /usr/lib64/libcurl.so.4
#19 0x000000378c41d922 in Curl_protocol_connect () from /usr/lib64/libcurl.so.4
#20 0x000000378c423dbc in Curl_connect () from /usr/lib64/libcurl.so.4
#21 0x000000378c42be30 in Curl_perform () from /usr/lib64/libcurl.so.4

4. デバック結果
#17行めの「Curl_ssl_connect」部分が怪しい・・・
ページ内のエラー部分も、外部サイトに通信をしている部分だ・・
以前のサーバーとcurl設定を比較すると、新しいサーバーはopensslを認識してない。
curlのバージョンは・・・? 違う・・
もう一度、opensslとcurlを再インストールして、再起動する
エラーを回復した

(参考サイト)
[PHP] PHP5.4 + Apache 2.4でSegmentation fault digape.com
メモとかそんな感じなやつ

Be the first to comment on "ApacheのSegmentationエラーをデバックする"

Leave a comment