Я отвечал за сервер, который в течение некоторого времени находился в напряжении, превышающем критический момент. Я рекомендовал изменения, которые в настоящее время внедряются другими членами команды, которые должны решить основные проблемы инфраструктуры сайта. Но есть острая проблема, которая требует временного решения, чтобы выиграть время.
Apache перезагружается каждое утро в 7:30 из-за работы CRON ротации журналов. 6:00 - 9:00 - наши часы пик для обычного использования сайта, и в сочетании с CRON серверу не хватает памяти.
Какая конфигурация ротации журналов может помочь? Стоит ли переводить с ежедневного на почасовой? Поменять пороги? Просто измените время (я так и сделал, но все равно отключился).
Можно вращать журналы без перезапуска или перезагрузки apache вообще. Обратной стороной является риск потери некоторых записей журнала.
Вот два способа сделать это:
postrotate
раздел конфигурационного файла следует изменить на copytruncate
.Совет EEAA по использованию удаленного сервера журналов полностью решает проблему, но может оказаться невозможным в вашей среде.
Используйте LogRotate для перезагрузить Apache вместо его перезапуска, как описано на этот сайт. Возможно, вы захотите изменить параметры на ежедневный. Время простоя не должно иметь никакого значения, если вы меняете ежечасно, ежедневно или еженедельно.
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
Перезагрузка должна позволить Apache завершить обслуживание любых открытых запросов перед перезагрузкой конфигурации. Вы можете потерять несколько запросов, но я не думаю, что вы потеряете много. Вы не можете ничего потерять.
Если вам нужна более высокая надежность, вам следует рассмотреть два сервера с балансировкой нагрузки с какой-либо проверкой работоспособности или аварийным переключением в реальном времени или с использованием удаленного сервера журналов.
Измените запланированное время cron, даже удалите apache из logrotated и при необходимости настройте его вручную. Остановите службу apache, сделайте паузу на несколько секунд, чтобы apache действительно завершил завершение работы, переименуйте файл журнала, перезапустите apache. Поскольку вы только переименовали файл журнала, он остается в том же каталоге и происходит «мгновенно». После того, как ваша служба будет запущена, переместите / сожмите / любой файл журнала туда, где он должен быть.
Если он получит действительно плохо, мой внутренний BOFH говорит указывать журналы на / dev / null и не беспокоиться о их вращении ...