Apache2 - 500 внутренняя ошибка сервера
Я использую VPS с Linux CentOs 6 с 4 ГБ ОЗУ, 10 ГБ HD и 2 виртуальных ЦП Intel(R) Xeon(R) ЦП L5640 @ 2,27 ГГц. Как говорит мой хост, каждый виртуальный процессор должен быть не менее 0,5 физического процессора.
В определенное время дня те, у кого больше трафика, при попытке получить доступ к моему php-скрипту я периодически получаю "500 внутренних ошибок сервера".
Я активирую ведение журнала на уровень отладки из apache, а также ведение журнала PHP с E_ALL, но я не могу найти ссылку на ошибку 500 ни в одном журнале (я проверил правильные журналы!).
У меня нет файла.htaccess в сценарии пути. Странно то, что ошибка запускается в первой строке php в скрипте (предыдущий html отображается правильно, но в первой строке php скрипт отправляет 500 ошибок).
Загрузка процессора всегда хороша (макс. 0,15 0,08 0,01), а объем оперативной памяти близок к 95%, но она пришла к замене всего 2 раза в месяц с 2-5 МБ.
Apache работает с prefork со следующими значениями:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 280
MaxClients 280
MaxRequestsPerChild 4000
</IfModule>
Все работает правильно, и я не получаю никаких ошибок в спокойное время, но я начинаю получать ошибки, когда трафик растет (6-9000 посещений в час).
Могу ли я решить проблему увеличения ресурсов? (Я могу обновить оперативную память до 16 ГБ).
Это может зависеть от достижения MaxClients (но apache должен записать это в журнал, верно?)?
Если я обновлю ОЗУ до 6 или 8 ГБ, я должен рассчитать значение MaxClients с этим?
MaxClients = Total RAM dedicated to the web server / Max child process size
Максимальный размер дочернего процесса составляет около 20M.
Как еще может быть проблема?
заранее спасибо
Вот раздел php.ini о регистрации ошибок
error_reporting = E_ALL | E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
error_log = /var/log/php_errors.log
Все, что не упомянуто, комментируется.
2 ответа
Первый порт вызова, когда вы сталкиваетесь с 500 ошибками в PHP, это проверка журнала ошибок PHP; если apache не сообщает об ошибке 500, то это вызвано PHP.
Чтобы проверить, не превышаете ли вы ограничения ресурсов, включите и наблюдайте за состоянием сервера apache.
Это причина проблемы:
Max Requests Per Child: 4000
+ Изменить MaxRequestsPerChild
для меньшего значения попробуйте начать с 70, и все прерывистые внутренние 500 ошибок сервера исчезнут.