如何理解dmesg中的php错误

时间:2016-09-16 09:55:22

标签: php segmentation-fault memcached

我在dmesg中为每个请求获得一个空白页面和一个新条目。

GraphDatabaseFactory

我已经发现它是由php-memcache引起的。将我的缓存驱动程序切换到除memcached之外的任何内容时,它似乎正常工作(我已经测试过文件和数组=>没有缓存)。但是,由于我想要memcached,我想知道如何进一步调查?

1 个答案:

答案 0 :(得分:4)

  

如何理解dmesg中的php错误

这非常简单:它告诉您php二进制文件映射到地址范围[0x400000, 0x400000+33c000)(Linux上x86_64二进制文件的正常)以及各种进程(pid) 4136941399等)崩溃,寄存器rip(也就是程序计数器)设置为0x5c0cc3,并注册rsp(也就是堆栈指针)设置为各种值(堆栈在Linux上随机化)。

由于所有rip值都相同,因此崩溃发生在所有实例的完全相同的位置。

  

我该如何进一步调查?

您需要为此php版本安装调试符号。

一旦你这样做,你可以先确定发生崩溃的功能,如下所示:

gdb /path/to/php
(gdb) x/i 0x5c0cc3   # GDB will tell you instruction and function

一旦您了解该功能,您就可以谷歌寻找解决方案或已知错误。

您还可以将GDB附加到正在运行的php进程,然后发出请求。如果php崩溃,您现在可以通过(gdb) where命令查看导致崩溃的调用堆栈。

除此之外,您可以从源代码构建php包,禁用优化,并进行源代码调试。

所有这一切都假定您知道如何编译包,如何调试C代码等。如果您不知道,那么您将不得不招募那些人。< / p>