Подключения Apache зависают при «отправке ответа» и высокой загрузке mysql

Apache на моем выделенном сервере постоянно зависает из-за того, что соединения застревают в состоянии "отправка ответа":

Статус Apache : соединения застревают в «Отправке ответа»

Это происходит, по крайней мере, несколько раз в день - иногда этого не происходит в течение 2 или 3 часов, иногда это будет происходить постоянно, до такой степени, что все соединения будут заняты и застревают отправка ответа в течение 5 минут после перезапуска apache. Это приводит к постоянным простоям сайтов. IP-адреса в этих запросах обычно - это Amazon AWS или Cloudflare (я использую Cloudflare для многих сайтов, а IP-адреса Amazon AWS могут быть связаны с тем, что сайт использует серверы имен Ezoic), которые обращаются к различным URL-адресам на сайте. Столбец «SS» на скриншоте выше показывает, как долго соединения зависали - в этом примере это сотни секунд на каждый запрос, так что что-то очень не так.

Это простые сайты Wordpress, обычно без изображений, без необычных плагинов , очень просто и определенно ничего необычного, что заставило бы страницу долго загружаться. Однако каждый из них имеет от 5000 до 100000+ сообщений на каждом сайте и может публиковать до нескольких тысяч сообщений в день (с использованием плагина «WP all import pro»), которые планируется публиковать в произвольное время в течение 24 часов с момента импорта. На сервере более 10 таких сайтов, но только 3 или 4 постоянно появляются в статусе apache с зависшими соединениями.

На всех сайтах на сервере ежемесячные просмотры страниц едва превышают ~ 500 000, и мой сервер должен легко обрабатывать их (от namecheap: XEON E3 1240 V3 8GB DDR3 1TB HDD SATA).

Mysql часто сильно загружен сервер, и иногда при просмотре списка процессов в phpmyadmin будут зависать запросы, а иногда и запросы NULL. Выполнение команды «top» также часто показывает очень высокую загрузку ЦП (у моего сервера 4 ядра ЦП). Примеры снимков экрана:

зависшие запросы

NULL запросы

высокая загрузка ЦП mysql

Вызывает беспокойство то, что размер журнала ошибок mysql в / var / lib / mysql превышает 3 ГБ, для меня это слишком много даже читать - переименование и проверка нового сгенерированного показывает много ошибок «Получил ошибку при чтении коммуникационных пакетов». Я не знаю, является ли это проблемой для зависших соединений в apache, и если да, то что с этим делать.

Я попытался изменить все возможные настройки apache, такие как Max Request Workers, со значения по умолчанию 150, чтобы можно было установить больше подключений (не помогает, так как любые новые подключения также становятся занятыми и зависают), отключая все плагины или пробуя разные темы на сайты wordpress (без эффекта), а также изменение некоторых других настроек mysql в my.cnf (согласно https://serverfault.com/a/989269/548654 ) без каких-либо улучшений. Я также попытался изменить все таблицы базы данных для одного из проблемных сайтов на InnoDB из MyISAM, но соединения по-прежнему зависают. Что еще я могу попытаться решить эту проблему?

0
задан 21 November 2019 в 19:53
1 ответ

MySQL Re:

"Ожидание блокировки уровня таблицы" подразумевает, что некоторая задача администрирования (например, ALTER TABLE) работает. Это - полный PROCESSLIST? Обычно непослушный запрос может быть определен при наличии "Времени", просто больше, чем самый продолжительный "застрявший" запрос.

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

Одно закрепляемое замедление в WordPress находится в определении таблицы метаданных: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

0
ответ дан 23 November 2019 в 13:41

Теги

Похожие вопросы