У меня есть пара серверов, на которых размещается один сайт электронной коммерции Magento с умеренным трафиком (60 000 просмотров страниц в день по данным Google Analytics, я думаю, около 80 000 запросов на самом сервере). Сервер базы данных работает плавно и быстро, за исключением редких случайных сбоев, но сервер apache время от времени падает.
Я настроил magento для использования рекомендованного PHP-кэширования (APC), а также для хранения своих собственных файлов кэша в 1,5-гигабайтных tmpfs (эти tmpfs регулярно переполняются, и у меня запущен скрипт для очистки файлов кэша, когда tmpfs заполнено более 80%). Я обслуживаю большинство изображений с облачного фронта амазонки. Недавно я настроил nginx в качестве обратного прокси для apache (nginx также обслуживает статические файлы). Я настроил apache в меру своих возможностей - keepalives и hostnamelookup отключены, а prefork настроен следующим образом:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Я не выключил файлы .htaccess, и регистрация доступа включена. Я знаю, что есть некоторые модули, которые я могу отключить. Я не уверен, какой эффект окажет любое из этих трех изменений, если таковые будут.
Сервер apache - это VPS с 6 гигабайтами оперативной памяти. На момент написания отчета сервер сообщал load average: 17.77, 18.27, 49.76
, но свободной оперативной памяти около 2 гигабайт. Когда все идет плохо, нагрузка возрастает до 120+ и остается там - перезапуск apache возвращает сайт обратно, а нагрузка снова падает.
vmstat
(в то время как сервер сообщает о загрузке выше), я думаю, показывает значение простоя процессора, колеблющееся между 0 и 70 или около того. iostat
показывает значение Айоваит от 0 до 0,2%.
Я немного застрял. То, что я мало знаю, говорит мне, что проблема в том, что процессор перегружен из-за комбинации выполняемого кода и количества пользователей. Но я не достаточно опытен, чтобы быть уверенным, что это проблема. Если это проблема, я думаю, что решения должны либо улучшить код, либо разделить сайт, размещенный на двух VPS, с помощью балансировщика нагрузки.
Итак, я думаю, мои вопросы:
- Что еще я могу сделать, чтобы найти проблемы или узкие места на сервере?
- Есть ли какие-либо очевидные изменения, которые я могу внести в конфигурацию сервера, чтобы улучшить это?
- Это хорошая идея, чтобы настроить автоматическую систему для перезапуска Apache, когда нагрузка превышает определенный уровень?
- Исходя из вышесказанного, насколько вероятно, что сайт перерос сервер?
Редактировать:
Я нашел что-то странное - / var / spool / mail / root был большим ... 38 гиг. Это звучит ... нездорово. Может ли это быть проблема?