Назад | Перейти на главную страницу

Ошибка сегментации Apache после logrotation на debian squeeze

Каждую воскресную ночь во время logrotation debian squeeze происходит сбой apache, когда postlogrotation пытается перезагрузить конфигурацию и / или перезапустить apache. Я даже попытался переконфигурировать ротацию журнала путем жесткого перезапуска (остановки запуска) службы с теми же ошибками.

Что происходит, так это то, что apache, похоже, запускается нормально, но каждый запрос вызывает следующую ошибку в apache error.log:

[notice] child pid xxxx exit signal Segmentation fault (11)

Если я перезапущу apache еще раз вручную, он снова будет работать нормально. Кто-нибудь знает, почему это происходит?

Экземпляр AWS работает под управлением debian squeeze, apache 2.2.16, php 5.4.32 и varnish 3 (если это важно).

Любые предложения очень приветствуются. Если я пропустил соответствующую информацию, скажите мне!

ОБНОВЛЕНИЕ: я переместил сайты Magento на другой сервер, и проблема перестала возникать (хотя осталось еще несколько других сайтов), и этого не произошло на новом сервере. По-прежнему мало идей относительно того, чем это вызвано

Могут быть разные причины такого сбоя, и вместо того, чтобы что-то предполагать, я бы посоветовал вам потратить немного времени на отладку как сценария logrotate, так и сделать дамп ядра apache для анализа проблемы с помощью gdb.

Вы можете вручную запустить сценарий logrotate в подробном режиме следующим образом (-v verbose, -f force):

logrotate -vf /etc/logrotate.d/apache2 

Для создания кордампа и анализа его с помощью gdb вы можете установить все необходимые пакеты с помощью apt-get, и это не очень сложно настроить.

Установите gdb и необходимые файлы символов:

apt-get install gdb 
apt-get install apache2-dbg php5-dbg

Устанавливать CoreDumpDirectory в конфигурации apache:

CoreDumpDirectory /tmp/apache2-coredump

Установите неограниченный ulimit:

ulimit -c unlimited

Вы можете прочитать coredump с помощью gdb следующим образом:

gdb apache2 -core /tmp/apache2-coredump/core

Вот подробное руководство: Как выяснить, что вызывает сбой сегментации Apache

Измените метод вращения, используя rotatelogs в вашей конфигурации apache:

 CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common 

rotatelogs выполнит ротацию журналов, так что изящность больше не требуется.

Вам понадобится cron только сжать старые журналы.

Документация: https://httpd.apache.org/docs/2.2/programs/rotatelogs.html

PS: Я знаю, что это не объясняет, почему у вас есть ошибка сегментации, но с этим методом у вас больше не будет изящности во время вращения.