본문 바로가기

서버 등 운영체제(OS)/Linux

apache coredump 분석 방법: [notice] child pid xxxxx exit signal Segmentation fault (11), possible coredump in

반응형

apache 가 원인미상의 오류로 재시작되는 현상이 있어 원인을 찾아 보았다.

먼저 apache error log에 coredump 가 생성되었으니 확인해보라는 부분이 있었고,

coredump 가 생성된 위치를 알려준다. 해당 위치로 이동해보자.

 

cat 또는 vi 를 사용해 coredump 파일을 열어보았는데, 텍스트 파일이 아니었다.

그래서 여는 방법을 찾아보았더니, gdb 를 사용해야 했다.

하지만 단순히 gdb 로 연다고 해서 열리는게 아니라, 이걸 생성한 데몬을 기준으로 열어주어야 한다.

 

gdb /app/apache/bin/httpd /app/log/coredump/core.httpd.xxxx.2.xxxxx

 

이런식으로 coredump 파일을 열어주면 오류 내용이 출력되고, 어느 부분을 실행하다 오류가 발생했는지는 backtrace를 입력해주면 된다.

 

(gdb) backtrace
#0  0x00007f6765dc772a in __strchr_sse2 () from /lib64/libc.so.6
#1  0x00007f6765d7cfd6 in putenv () from /lib64/libc.so.6
#2  0x00007f6763ea7292 in php_putenv_destructor (pe=0x7f6727891b40)
    at /app/src/php-5.3.29/ext/standard/basic_functions.c:3435
#3  0x00007f6763f8585b in zend_hash_destroy (ht=0x7f66d423bd48) at /app/src/php-5.3.29/Zend/zend_hash.c:529
#4  0x00007f6763ea78a5 in zm_deactivate_basic (type=1, module_number=26, tsrm_ls=0x7f66d412c8f0)
    at /app/src/php-5.3.29/ext/standard/basic_functions.c:3768
#5  0x00007f6763f7a0af in module_registry_cleanup (module=<value optimized out>, tsrm_ls=<value optimized out>)
    at /app/src/php-5.3.29/Zend/zend_API.c:2173
#6  0x00007f6763f855b8 in zend_hash_reverse_apply (ht=0x7f676479e4a0,
    apply_func=0x7f6763f7a090 <module_registry_cleanup>, tsrm_ls=0x7f66d412c8f0)
    at /app/src/php-5.3.29/Zend/zend_hash.c:757
#7  0x00007f6763f78120 in zend_deactivate_modules (tsrm_ls=0x7f66d412c8f0)
    at /app/src/php-5.3.29/Zend/zend.c:867
#8  0x00007f6763f18509 in php_request_shutdown (dummy=<value optimized out>)
    at /app/src/php-5.3.29/main/main.c:1643
#9  0x00007f6764010257 in php_apache_request_dtor (r=0x7f670413c6c0)
    at /app/src/php-5.3.29/sapi/apache2handler/sapi_apache2.c:509
#10 php_handler (r=0x7f670413c6c0) at /app/src/php-5.3.29/sapi/apache2handler/sapi_apache2.c:681
#11 0x0000000000443450 in ap_run_handler (r=0x7f670413c6c0) at config.c:158
#12 0x0000000000446a7e in ap_invoke_handler (r=0x7f670413c6c0) at config.c:376
#13 0x0000000000492940 in ap_process_request (r=0x7f670413c6c0) at http_request.c:282
#14 0x000000000048f8c0 in ap_process_http_connection (c=0x7f672000d198) at http_core.c:190
#15 0x000000000044a9e0 in ap_run_process_connection (c=0x7f672000d198) at connection.c:43
#16 0x00000000004b03df in process_socket (thd=0x27f74a8, dummy=<value optimized out>) at worker.c:545
#17 worker_thread (thd=0x27f74a8, dummy=<value optimized out>) at worker.c:895
#18 0x00007f67660e3aa1 in start_thread () from /lib64/libpthread.so.0
#19 0x00007f6765e30c4d in clone () from /lib64/libc.so.6
(gdb)

 

해당 문제가 발생한 서버는 php5.3.29 라는 오래된 버전을 사용하고 있는 중인데,.. 

putenv() 를 실행할때 메모리 오류가 발생하였다. 그래서 해당 건을 $_SERVER 와 $_ENV를 활용한 코드로 대체하여 수정하였다.

 

끗.

반응형