我最近使用以下方法将 Debian Lenny 服务器更新到 php 5.3,5点德布来源。执行此操作后不久,服务器上的某些(但不是全部)站点停止响应请求。将返回空白响应 - 没有标题,没有内容,什么都没有。
我发现这个相关问题在 stackoverflow 上似乎描述了类似的内容,并使用了用户在答案中相同的代码来查看我是否可以复制该问题:
<?php
class A {
public function __construct()
{
new B;
}
}
class B {
public function __construct()
{
new A;
}
}
new A;
print 'Loaded Class A';
?>
这引发了问题 - 尽管原始问题指出此问题已在 PHP 5.5.0 中修复,但页面什么也没有返回。没有您期望的 CPU 阻塞,没有等待,只是几乎立即没有响应。
然后我从 cli ( php -f test.php
) 运行相同的代码,得到的唯一输出是“分段错误”。
跟踪内核日志我发现:
2 月 16 日 07:04:06 生物内核:[192203.269037] php[17710] 一般保护 ip:76ef37 sp:7fff155e9bb0 错误:0 位于 php5[400000+870000] 2 月 16 日 08:57:31 生物内核:[199639.699854] apache2[31136]:在 7fff13a84fe0 ip 7f730514ea40 sp 7fff13a85008 处发生段错误,libphp5.so[7f7304ce8000+915000] 中出现错误 6
一切都非常奇怪,我不确定它指向什么/我应该做什么来进一步调试它。正如我所说,有些网站可以工作,但上述代码肯定会触发它。并不是说我想要服务器的网站有这样的代码 - 这只是一个例子。
任何帮助深表感谢!
答案1
看起来是因为苏霍辛。将其作为 php 模块禁用后一切又恢复正常。
答案2
为了便于将来参考,您通常希望在使用 的进程上启用 coredump ulimit -c unlimited
,然后通过 运行生成的核心转储gdb
以从中获取回溯。有时您也可以使用ltrace
来跟踪库调用,尽管这种方法提供的信息不太有用。