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

Проблемы с сервером, нехватка оперативной памяти, действительно высокая средняя нагрузка

Мне отчаянно нужна помощь в выяснении того, как решить эту проблему. Я запускаю довольно критически важный веб-сервер (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. производительность стека по другому аналогичному вопросу и репост здесь для вашей справки:

  1. Правильно настройте Apache: Apache - хорошее программное обеспечение, но оно сразу же потребляет много памяти. Например, я считаю, что по умолчанию разрешено 255 подключений в секунду? Я могу заверить вас, что большинство простых сайтов едва ли получают 40 подключений в секунду в хороший день. Так что адаптация Apache к вашему трафику поможет. Также есть KeepAlive установка в Apache, которая отлично работает! Но я считаю, что из коробки он настроен на MaxKeepAliveRequests из 100, что довольно безумно. Обычно я устанавливаю примерно 30 подключений с небольшим KeepAliveTimeout от 2 до 3 секунд. Ключ в том, чтобы KeepAliveTimeout чтобы соответствовать скорости, необходимой для загрузки средней страницы, с небольшими накладными расходами / медлительностью. Итак, если страница загружается за 1 секунду, выполните KeepAliveTimeout 2 секунды.
  2. Проверьте код своих сайтов WordPress на предмет потенциальных узких мест: Сконцентрируйтесь на ядре PHP и выясните, что вы можете. Обратите внимание на чрезмерные вызовы MySQL и файловой системы. Здесь вы сможете заставить приложение летать! Также проверьте memory_limit в твоем php.ini и убедитесь, что он не выше необходимого. Значение по умолчанию - 64 МБ, но во многих случаях его можно уменьшить до 32 МБ.
  3. Настройка MySQL или перенос на собственный сервер: После того, как я написал о MySQL выше, я понял, что вы можете разместить свой экземпляр MySQL на том же компьютере. Изучите оптимизацию производительности MySQL, запустив сценарий вроде Учебник по настройке MySQL. Без настройки MySQL съест все ресурсы и выйдет из строя. С настройкой MySQL будет работать лучше / быстрее, и ресурсы могут быть освобождены для других целей. Также рассмотрите возможность переноса своей базы данных MySQL на автономный сервер. Возможно, вам придется научиться правильно подключать к сети и брандмауэру сервера, чтобы разрешить вашим серверам доступ, но защитить от хакеров, но выигрыш в производительности будет большим.

Что касается настройки MySQL, это может занять несколько недель вначале. Причина в том, что сценарии настройки основаны на реальном трафике, который видит MySQL. Таким образом, вы в основном делаете свой сайт живым для мира, ждете 2 дня (по крайней мере), запускаете сценарии настройки, а затем ждете еще несколько дней, чтобы настроить еще немного. Примерно через неделю вы сможете настроить MySQL для работы так же хорошо, как и с вашей настройкой.

Сначала установите эти плагины: супер кеш (режим htaccess), wpbase, кеш виджетов. Wordpress известен своими проблемами. ЕСЛИ это не помогает, это может быть утечка памяти в одной из ваших тем (особенно, если включен мобильный вид).

Опубликуйте журналы доступа и ошибок.

Я настоятельно рекомендую работать с nginx вместо apache.