Мне отчаянно нужна помощь в выяснении того, как решить эту проблему. Я запускаю довольно критически важный веб-сервер (Debian 7.5, 512 МБ ОЗУ, 512 МБ подкачки, Apache, MySQL). На нем работает пара сайтов WordPress. Сегодня я обнаружил, что веб-сайты реагируют довольно медленно, и ssh'd обнаружил, что средняя загрузка была чуть выше 10,0, использование ОЗУ было на 100%, а своп был близок к пределу в 512 МБ.
Я понятия не имею, как понять, что происходит. Apache или MySQL настроены неправильно? Может быть, кто-то атакует сервер повторяющимися попаданиями (откуда мне знать?). Я установил htop
но даже если бы я увидел, что Apache или MySQL съедают массу ресурсов, как бы я понял, почему?
Любые моменты в правильном направлении будут высоко оценены. Я здесь в растерянности, и мне нужно поддерживать стабильность этого сервера.
Примечание: сервер работал 30 дней, так что, возможно, это была какая-то медленная утечка. Теперь, когда я перезагрузился, средняя загрузка составляет 0,45 1,10 0,88, ОЗУ - 165/512 МБ, а подкачка - 68/512 МБ.
ОБНОВЛЕНИЕ: все еще есть проблемы. Я сделал снимок экрана htop
ниже.
Поздравляем, вам удалось использовать почти все пространство подкачки.
Первая очевидная проблема здесь в том, что вы очень глубоко погрузились в свопинг. Вероятно, это является причиной того, что система так сильно ломается (много времени, проведенного в системе, ожидание ввода-вывода и программные прерывания).
Первое, что нужно сделать, это уменьшить количество запущенных процессов Apache. Для небольшого сайта такое количество не нужно, и это просто бросит вас в глубокую подкачку и убьет вашу производительность ... что уже произошло. Я бы порекомендовал вам начинать с очень малого и увеличивать, когда это необходимо. Пример:
StartServers 1
MinSpareServers 1
MaxSpareServers 2
MaxClients 5
Это ограничивает вас обслуживанием только 5 одновременных запросов (все остальные должны ждать в очереди). Если на этом этапе вы получаете предупреждения от Apache о том, что серверы исчерпаны, и у вас все еще есть свободная оперативная память, вы можете увеличить их, но в конечном итоге вы столкнетесь с точкой, когда на вашем VPS просто не хватит оперативной памяти для обрабатывать весь ваш трафик. На этом этапе вам следует обновить VPS.
Прежде всего, основываясь на скриншоте, который вы разместили с htop
вывод, похоже у вас 512 МБ ОЗУ на сайте под управлением WordPress? Я никогда не видел, чтобы WordPress был счастлив на серверах с объемом оперативной памяти менее 1 ГБ. Возможно, если вы запускаете тестовый сайт или сайт разработки, 512 МБ будет достаточно, но для производственного сайта вам понадобится 1 ГБ ОЗУ. В этом корень вашей проблемы. Тем не менее, вот несколько идей, которые помогут вам добиться большей производительности от имеющейся у вас установки:
Я понятия не имею, как понять, что происходит. Apache или MySQL настроены неправильно? Может быть, кто-то атакует сервер повторяющимися попаданиями (откуда мне знать?). Я установил htop, но даже если бы увидел, что Apache или MySQL съедает массу ресурсов, как бы мне понять, почему?
Во-первых, я бы не стал паниковать по поводу нападения. Реальность такова, что ваш сервер, вероятно, просто принимает на себя большую нагрузку легитимного трафика, но сам сервер не настроен / не настроен для вашего использования. Конечно, плохие конфигурации могут сбить вас с толку во время атаки DDoS (распределенный отказ в обслуживании), но все это может сделать вашу жизнь несчастной, когда хороший / нормальный трафик внезапно появляется в большом количестве.
Я отправил хороший список вещей, которые вы можете просмотреть, чтобы улучшить свой L.A.M.O. производительность стека по другому аналогичному вопросу и репост здесь для вашей справки:
KeepAlive
установка в Apache, которая отлично работает! Но я считаю, что из коробки он настроен на MaxKeepAliveRequests
из 100, что довольно безумно. Обычно я устанавливаю примерно 30 подключений с небольшим KeepAliveTimeout
от 2 до 3 секунд. Ключ в том, чтобы KeepAliveTimeout
чтобы соответствовать скорости, необходимой для загрузки средней страницы, с небольшими накладными расходами / медлительностью. Итак, если страница загружается за 1 секунду, выполните KeepAliveTimeout
2 секунды.memory_limit
в твоем php.ini
и убедитесь, что он не выше необходимого. Значение по умолчанию - 64 МБ, но во многих случаях его можно уменьшить до 32 МБ.Что касается настройки MySQL, это может занять несколько недель вначале. Причина в том, что сценарии настройки основаны на реальном трафике, который видит MySQL. Таким образом, вы в основном делаете свой сайт живым для мира, ждете 2 дня (по крайней мере), запускаете сценарии настройки, а затем ждете еще несколько дней, чтобы настроить еще немного. Примерно через неделю вы сможете настроить MySQL для работы так же хорошо, как и с вашей настройкой.
Сначала установите эти плагины: супер кеш (режим htaccess), wpbase, кеш виджетов. Wordpress известен своими проблемами. ЕСЛИ это не помогает, это может быть утечка памяти в одной из ваших тем (особенно, если включен мобильный вид).
Опубликуйте журналы доступа и ошибок.
Я настоятельно рекомендую работать с nginx вместо apache.