L0NGMAN
@L0NGMAN

PHP Fatal error: Maximum execution time of 30 seconds exceeded in Unknown on line 0

В логах появляется такие записи «PHP Fatal error: Maximum execution time of 30 seconds exceeded in Unknown on line 0» и сервер зависает, по ssh/ftp не заходит но на пинг отвечает. Сталкивалса ли кто нибудь с таким чудам? Сервер Apache/2.2.3 (CentOS), PHP 5.3.10
  • Вопрос задан
  • 9335 просмотров
Решения вопроса 1
Aco
@Aco
Заклинатель кода
Могу предположить, что у вас скрипт впадает в рекурсию, залипает, апач начинает феерически форкаться что бы удовлетворить запросы, новые процессы так же залипают, система эпохально теряет ресуры (память и процессорное время), многое забивается в своп, остальные процессы становятся не дееспособными такие как ssh, ftp из-за отсутвия ресурсов. апач так же встает так как fork перестаёт работать. После некоторого времени скрипт убивается апач-форком по max_execution_time, ресурсы возвращается, солнце становится ярче, небо голубее, ssh быстрее. Как-то так. Итого: очень тяжелый скрипт детектед.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@cat_crash
Дополню предыдущий пост, уважаемого Aco
Судя по симптомом действительно системе жутко не хватает ресурсов.
— Далеко не факт что если раньше работал то нет рекурсии. Ошибка в логике + неверные данные = бесконечная рекурсия.
Что могу посоветовать:
— Поиграйтесь с memory_limit. Он может помочь найти «слабое звено» т.к. рекурсия обычно черевата съеданием ресурсов системы
Ну и конечно жестокое порно дебаг ночами на тестовом энваирменте. Только так вы сможите разобраться в логике чужого кода и найти bottleneck
Ответ написан
Комментировать
@step307
Посмотрите еще access log, что предшествовало падению, какие запросы. Возможно это натолкнет на какую-нибудь мысль.

Важно еще понимать периодичность возникновения проблемы. Связано это с количество юзеров (соотв. нехваткой ресурса) или с заходом поискового робота или с редким но «метким» вызовом какойто тяжелой функции (по переколбасу кэша, импорту большого объема данных и т.д.)
Ответ написан
Комментировать
Попробуйте set_time_limit(0);. Если не поможет, то это может быть бесконечная рекурсия.
Ответ написан
Комментировать
L0NGMAN
@L0NGMAN Автор вопроса
Спасибо всем большое, пойду дебажить. Поставлю xDebug
Ответ написан
Комментировать
@egorinsk
Если вы используете apache, то первым делом смотрите вывод top под нагрузкой, вторым — поставьте mod_status и проверьте, какие запросы висят. Тогда уже можно смотреть почему. Такде, можно логгировать время выполнения запросов (апач это позволяет)
Ответ написан
Комментировать
@WebCraft
«Unknown on line 0» скорее всего указывает на то, что скрипт закодирован зендом\ионкубом или похожим образом. Посмотрите сперва в сам скрипт (его имя выводится в журнал, разрешите запись в error_log).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы