У нас возникли проблемы с нашим сервером WordPress в Rackspace, который падает при среднем трафике после отправки электронного письма.
Характеристики сервера:
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 минут, и сервер перестает отвечать (даже когда трафик снова падает). Для того, чтобы снова стать активным, требуется жесткая перезагрузка.
Я не могу подключиться с помощью Putty, а домашняя страница колеблется между тайм-аутом и ужасной ошибкой «Ошибка установления соединения с базой данных».
Используя агент мониторинга пространства стойки в последнем тесте, мы видим, что ЦП достигает 100% перед самым выходом из строя, используемая память достигает пика около 1,6 ГБ, а свободная падает до 100 МБ. Похоже, что также используется около 2 ГБ памяти подкачки (всего 4 ГБ). Стандартное использование составляет около 15% ЦП, 800 МБ памяти и 400 МБ подкачки.
В нашей конфигурации Apache не заданы следующие параметры (нет файлов в /etc
do); Timeout, KeepAlive, MaxKeepAliveRequests, KeepAliveTimeout; поэтому я предполагаю, что используются значения по умолчанию.
Я посмотрел настройки mariadb:
innodb_buffer_pool_size = 1400M
max_user_connections = 0
Но, похоже, причина не в этом.
Я также включил performance_schema, но я не совсем понимаю, что именно ищу. Я даже не уверен, что проблема в БД.
Мне хочется обновить экземпляр, но я бы предпочел иметь более четкое представление о том, где находится узкое место и что заставляет сервер умирать, а не просто замедлять его работу.
Есть идеи, с чего начать? Кажется, есть много возможных настроек и много информации.
решение1
Тщательный мониторинг во время любого события имеет решающее значение. Как мы видим, правда вышла наружу:
Используя агент мониторинга пространства стойки в последнем тесте, мы видим, что ЦП достигает 100% перед самым выходом из строя, используемая память достигает пика около 1,6 ГБ, а свободная падает до 100 МБ. Похоже, что также используется около 2 ГБ памяти подкачки (всего 4 ГБ). Стандартное использование составляет около 15% ЦП, 800 МБ памяти и 400 МБ подкачки.
PHP, как известно, довольно требователен к ресурсам процессора. Вы использовали весь доступный процессор и почти всю доступную оперативную память.
Сначала вам следует предпринять шаги для решения этой проблемы, например, кэширование опкода (например, Zend OPcache) и кэширование файлов (например, плагин W3 Total Cache WordPress). Если это не поможетдостаточно, то пришло время обновить экземпляр.
решение2
Вероятно, вы просто запускаете слишком много процессов одновременно, исчерпываете память и перегружаете swap. Возможно, что-то еще блокирует, но сначала разберитесь с этим, а затем посмотрите, где вы находитесь.
Вы не сказали нам, используете ли вы mod_php или что-то вроде php-fpm. Последний лучше справляется с нагрузкой, но в любом случае убедитесь, что вы не запускаете больше процессов php, чем у вас есть памяти. Вы, вероятно, не получите никакого выигрыша в производительности от запуска более 5 или 10 процессов, но запуск mod_php по умолчанию в частности будет запускать гораздо больше, чем у вас есть памяти. Кроме того, перезапускайте процессы каждые 30 или около того запросов. Если вы выделяете 1 ГБ вашей базе данных и ОС, то ваш другой ГБ, вероятно, не справится с 10 процессами WordPress. Посмотрите, сколько памяти они занимают, и посчитайте, с небольшим зазором. Вам не следует использовать подкачку в обычном порядке вещей.
Посмотрите на настройки keep-alive. С Apache вам, вероятно, лучше всего отключить его или установить на 1 секунду. Nginx обрабатывает keep-alive гораздо лучше. Фактически, это единственная действительно важная причина, по которой nginx, скорее всего, будет работать лучше с php-приложением, таким как WordPress (хотя это достигается ценой менее приятной конфигурации). Это, скорее всего, не является фактором при вашем тестировании, но важно для реальных браузеров.
100% CPU меня удивляет. Используйте top, чтобы увидеть, что его использует. Помните также, что 100% часто означает 100% одного ядра. Вы можете просто увидеть одно задание cron, которое в WordPress обычно не является "cron" как таковым, а скорее заданиями, которые запускаются как дополнительные при обработке веб-запросов. Отсутствие кэширования opcode также может быть причиной высокой загрузки процессора.