Недавно я обновил сервер Debian Lenny до php 5.3,5, используя dotdeb источник. Вскоре после этого некоторые (но не все) сайты на сервере перестали отвечать на запросы. Будет возвращен пустой ответ - без заголовков, без содержимого, ничего.
я нашел этот связанный вопрос в 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. Никакого блока ЦП, как и следовало ожидать, никакого ожидания, просто почти мгновенный нулевой ответ.
Затем я запустил тот же код из cli (php -f test.php
), и единственный вывод, который я получил, был «Ошибка сегментации».
Просматривая журнал ядра, я обнаружил:
16 февраля 07:04:06 ядро существа: [192203.269037] php [17710] общая защита ip: 76ef37 sp: 7fff155e9bb0 ошибка: 0 в php5 [400000 + 870000] 16 февраля 08:57:31 ядро существа: [199639.699854] apache2 [ 31136]: segfault на 7fff13a84fe0 ip 7f730514ea40 sp 7fff13a85008 ошибка 6 в libphp5.so [7f7304ce8000 + 915000]
Все очень странно, и я не уверен, на что это указывает / что мне делать, чтобы отладить это дальше. Как я уже сказал, некоторые сайты работают, но код, подобный приведенному выше, определенно вызывает это. Не то, чтобы на сайтах, которые я хочу серверить, есть такой код - это просто пример.
Любая помощь высоко ценится!
Для справки в будущем вы обычно хотите включить резервные копии для процесса, используя ulimit -c unlimited
, затем запустите созданный дамп ядра через gdb
чтобы отследить это. Иногда вы также можете использовать ltrace
для отслеживания вызовов библиотеки, хотя этот метод дает менее полезную информацию.
Похоже, все дело в Сухосин. Отключил его как модуль php, и все снова работает нормально.