使用 PHP 脚本时,我通常不必担心底层系统。但今天,我必须这么做。
一个运行良好的 PHP 脚本 (cronjob) 自 2 天前以来就崩溃了。cronjob 邮件以及通过 shell 运行脚本都显示:
Bus-Zugriffsfehler (Speicherabzug geschrieben)
如果通过 PHP-FPM(通过 nginx)运行相同的脚本,我会收到一个 Bad Gateway,这可能意味着“我已经崩溃了,别管我”。
不幸的是,我不知道如何找到更多信息,更不用说解决问题了。我已经检查了系统日志(与问题无关)dmesg
(没有)和 PHP 错误日志(没有)。我还重新安装了 php5-cli、php5-pfm,甚至 libc6,并重新启动了服务器——没有效果。
顺便说一句:整个程序都在虚拟服务器 (VPS) 上运行,这也限制了出现硬件错误的可能性。PHP 最近已更新到 php5-cli (5.5.9+dfsg-1ubuntu4.7),但此后脚本运行良好,持续了 9 天,并重启了两次……
有什么想法吗?非常感谢!
燃烧的利奥
编辑:解决方案
当然,定期echo
从 PHP 脚本发送并不优雅 - 但它有助于跟踪函数调用的问题。当然,寻求帮助的人确实触及了一些东西,当他告诉他他没有...
解决方案非常简单:第一行中静态类方法调用自身:
class ServerManager {
public static function dropCache() {
ServerManager::dropCache(); // VERY STUPID
foreach (array('active', 'packed', 'old') as $class) {
$cacheID = 'cache-'.$class.'-0';
Cache::drop($cacheID);
}
}
}
好吧,也许 PHP 应该更具体一点,说明问题的原因。不过,删除这个就解决了问题。