我在 apache 的 error_log 中看到以下错误。它是完全随机的,但当它发生时,它会在 error_log 中打印 10-20 行。
Apache: [core:notice] [pid ***] AH00052: child pid *** exit signal Segmentation fault (11)
我正在运行 Apache 2.4.12 和 PHP 5.4.36。
我尝试使用 gdb 7.8 来收集更多信息。连接到 apache 进程后,我等待并最终收到分段错误:
(gdb) attach 205907
Attaching to process 205907
Reading symbols from /usr/local/apache2/bin/httpd...done.
Reading symbols from /lib64/libpcre.so.0...(no debugging symbols found)...done.
... lots of reading symbols ...
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
(gdb) backtrace
#0 0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
#1 0xb7e28fbf1b781194 in ?? ()
Backtrace stopped: Cannot access memory at address 0xdf5a8fbf24c295cc
(gdb) backtrace full
#0 0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
No symbol table info available.
#1 0xb7e28fbf1b781194 in ?? ()
No symbol table info available.
Backtrace stopped: Cannot access memory at address 0xdf5a8fbf24c295cc
不幸的是,输出结果不符合我的预期。我应该怎么做才能从分段错误中获取更多信息?
答案1
由于您在 libc 中拥有 sig11,并且它不太可能有如此容易触发的错误,我建议您使用 memtest86+ 来测试服务器的内存。
答案2
您需要 libc 的调试版本,可能需要 /lib64/libpcre.so.0... 从您的输出中:
/lib64/libpcre.so.0...(no debugging symbols found)
我希望这篇文章对你有用:
如何使用 libc 的调试版本
[https://stackoverflow.com/questions/10000335/how-to-use-debug-version-of-libc]