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

Из-за среднего трафика сервер Wordpress требует жесткой перезагрузки

У нас возникли проблемы с падением нашего сервера Wordpress в стойке со средним трафиком после отправки электронного письма.

Характеристики сервера:

CPU            2 vCPUs
RAM            2 GB
System Disk   80 GB
Network      240 Mb / s
Disk I/O    Good

Бег:

Centos       7.0
Wordpress  4.3.1
Httpd      2.4.6
PHP       5.4.11
MariaDB   5.5.41

Насколько я могу судить, установка довольно стандартна, а база данных довольно стандартна, проиндексирована и довольно мала. Мы также занимаемся кешированием объектов wordpress.

Согласно New Relic; при нормальном трафике сайт проводит около 80% времени в PHP, 15% времени во внешней сети и лишь небольшой процент в базе данных. Среднее время приложения стандартной страницы составляет около 800 мс, что мне кажется медленным.

Выполнение нагрузочного теста 250 подключений за 1 минуту приводит к тому, что подключения становятся все длиннее, а затем начинается тайм-аут примерно через 30, и сервер перестает отвечать (даже когда трафик снова падает). Чтобы снова стать активным, требуется жесткая перезагрузка.

Я не могу подключиться с помощью шпатлевки, и домашняя страница колеблется между тайм-аутом и возвратом страшной «Ошибка установления соединения с базой данных».

Используя агент мониторинга стоечного пространства в самом последнем тесте, выяснилось, что процессор загружен на 100% незадолго до смерти, а используемая память достигает максимума около 1,6 ГБ со свободным сбросом примерно до 100 МБ. Похоже, что также используется около 2 ГБ памяти подкачки (всего 4 ГБ). Стандартное использование составляет около 15% ЦП, 800 МБ памяти и 400 МБ подкачки.

Наша конфигурация Apache не устанавливает ничего из следующего (нет файлов в /etc делать); Тайм-аут, KeepAlive, MaxKeepAliveRequests, KeepAliveTimeout; поэтому я предполагаю, что он использует значения по умолчанию.

Я посмотрел настройки mariadb:

innodb_buffer_pool_size = 1400M
max_user_connections = 0

Что, кажется, не является причиной.

Я также включил performance_schema, но я действительно не знаю, что ищу. Я даже не уверен, что проблема в БД.

У меня возникает соблазн обновить экземпляр, но я бы предпочел иметь более четкое представление о том, где находится узкое место и почему сервер умирает, а не просто замедляется.

Есть идеи, с чего начать? Кажется, есть много возможных настроек и много информации.

Вероятно, вы просто запускаете слишком много процессов одновременно, нехватка памяти и сбой подкачки. Может быть, что-то еще блокируется, но сначала разберитесь с этим, а затем посмотрите, где вы находитесь.

Вы не сказали нам, используете ли вы mod_php или что-то вроде php-fpm. Последний лучше справляется с нагрузкой, но в любом случае убедитесь, что вы не запускаете больше php-процессов, чем у вас есть память. Вы, вероятно, не получите никакого выигрыша в производительности от запуска более 5 или 10 процессов, но запуск mod_php по умолчанию, в частности, будет работать намного больше, чем у вас есть память. Кроме того, повторно обрабатывайте каждые 30 запросов. Если вы дадите 1 ГБ своей базе данных и ОС, то ваш другой ГБ, вероятно, не будет обрабатывать 10 процессов WordPress. Посмотри сколько памяти берут и проработай, с небольшим просветом. Вы не должны использовать своп в обычном порядке.

Посмотрите на свои настройки keep-alive. С Apache вам, вероятно, лучше либо выключить его, либо установить на 1 секунду. Nginx намного лучше справляется с сохранением активности. Фактически, это единственная действительно важная причина, по которой nginx, вероятно, будет лучше работать с php-приложением, таким как WordPress (хотя это происходит за счет менее приятной конфигурации). Скорее всего, это не фактор вашего тестирования, но важно для реальных браузеров.

100% CPU меня удивляет. Используйте верхнюю часть, чтобы увидеть, что им используется. Помните также, что 100% часто означает 100% одного ядра. Вы можете просто увидеть, как срабатывает одно задание cron, которое в WordPress обычно не является "cron" как таковым, а скорее задания запускаются как дополнительные при обработке веб-запросов. Отсутствие кэширования кода операции также может вызывать высокую загрузку процессора.

Тщательный мониторинг во время любого события имеет решающее значение. Как видим, правда вышла наружу:

Используя агент мониторинга стоечного пространства в самом последнем тесте, выяснилось, что ЦП загружен на 100% непосредственно перед смертью, а используемая память достигает пика около 1,6 ГБ со свободным сбросом примерно до 100 МБ. Похоже, что также используется около 2 ГБ памяти подкачки (всего 4 ГБ). Стандартное использование составляет около 15% ЦП, 800 МБ памяти и 400 МБ подкачки.

Известно, что PHP довольно интенсивно использует процессор. Вы использовали весь доступный процессор и почти всю доступную оперативную память.

Сначала вы должны предпринять шаги для решения этой проблемы, такие как кеширование кода операции (например, Zend OPcache) и кеширование файлов (например, плагин W3 Total Cache WordPress). Если это не поможет достаточно, то пора обновить экземпляр.