LINUX.ORG.RU

Apache2 создает iowait более 80%

 ,


0

1

Добрый день. Веб сервер:

  • 8 ядер xeon
  • 32 гиг оперативы
  • 2 hdd в raid 1
  • 1 ssd (база)

OS Debian nginx+apache2+mysql+php7 (панель ISPmanager)

  • #hdparm -t /dev/sda
  • disk reads: 418 MB in 3.01 seconds = 138.82 MB/sec
  • #hdparm -t /dev/sdb
  • disk reads: 424 MB in 3.01 seconds = 140.98 MB/sec

#df -h: 1.8T 409G 1.3T 24% /

На сервере крутиться более 200 сайтов на вордпрессе (база mysql на отдельном, не большом ссд). Т.е. на данный проблемный массив io нагрузка от nginx+apache2 (картинки, css, кеш вордпресса).

Проблема в том, что периодически (3-5 раз в сутки) дисковая система перестала справляться с нагрузкой, iowait более до 80% и сервер падает на 10-20 мин. В iotop видно большую очередь процессов апача. Пока написал скрипт, который перегружает апач.

Раньше была проблема в «too many open files», были внесены следующие параметры:

/etc/security/limits.conf

  • * soft nofile 16384
  • * hard nofile 16384

/etc/nginx/nginx.conf

  • worker_processes 8;
  • worker_connections 1048;
  • worker_rlimit_nofile 16384;

Проблема наверно в них. Подскажите куда копать? как искать баланс?

Я не сисадмин, но опыт имеется. Заранее спасибо.


Ответ на: комментарий от matawe6067

Nginx есть в связке. Перед ним еще стоит Cloudflare.

OS Debian nginx+apache2+mysql+php7 (панель ISPmanager)

А если кеш будет дергать не apache, а nginx - разве станет легче?

Я понимаю, что в идеале нужно перейти на ССД. Но пока такой возможности нет. Хотелось бы поставить ограничение, где при пиковых нагрузках на сервере не скапливалась бы очередь с лавинным эффектом нагрузки iowait. Но в тоже время не порезать запросы в обычном режиме работы.

dert12 ()
Ответ на: комментарий от dert12

Есть, cgroups называется, встроена в ведро. Для управления есть различные тулзы или же можешь вручную правкой специальных файлов в /proc. Ну, я пока не пробовал регулировать IO, но с ограничениями памяти и процессорного времени оно справляется на ура.

Unicode4all ★★★★★ ()
Последнее исправление: Unicode4all (всего исправлений: 1)

Что не справляется с IO?
Зеркало? 2 диска - ~300 iops на чтение.
200 сайтов - тупо 200 iops.
Чуть больше нагрузка на все сразу - диски проседают.
Кэшировать, добавлять шпинделей …

anonymous ()

Посмотреть акцеслог и забанить ботов.

slowpony ★★★★ ()

ДОБАВИТЬ (а не снять) лимиты
https://www.nginx.com/blog/rate-limiting-nginx/

Есть ограниченное количество запросов, которое сервер может обслужить за ограниченное время. Если откручивать лимиты бесконечно - то время ответа сервера на запрос тоже начнет стремиться к бесконечности.

slowpony ★★★★ ()

Проблема в том, что периодически (3-5 раз в сутки) дисковая система перестала справляться с нагрузкой, iowait более до 80% и сервер падает на 10-20 мин. В iotop видно большую очередь процессов апача. Пока написал скрипт, который перегружает апач.

Вот берем, смотрим время начала, время окончания.
Потом берем акцеслог за тот же период и анализируем.
Количество, качество. Делаем выводы. Принимаем меры.

slowpony ★★★★ ()
Ответ на: комментарий от slowpony

Лимиты стоят.

limit_req zone=one burst=50 nodelay;

limit_req_status 429;

limit_req_zone $limit_key zone=one:20m rate=8r/s

Так же есть список блеклистов и за cloudflare.com

anonymous ()
Ответ на: комментарий от anonymous

А можно подробнее, что и чем кешировать? Что есть шпиндели?

Статический кеш страниц создает плагин вордпресса.

anonymous ()
Ответ на: комментарий от anonymous

Отписал выше, не заметил что сессия кончилась и был разлогинен

dert12 ()
Ответ на: комментарий от darkenshvein

Согласен, ВП с кучей плагинов еще тот комбайн по пожиранию ресурсов. Думал о другой cms, но переезд будет не рентабелен.

dert12 ()
Ответ на: комментарий от anonymous

Ну, насколько я понимаю, вордпресс кэширует наиболее часто используемые страницы.
Если бот решит, например, проиндексировать все страницы - их точно не будет в кэше.
Т е будут читаться данные с диска.
Шпиндель - это ось, на которой крутятся блины в диске. Из-за физических ограничений возникают проблемы со скоростью доступа
(число операций ввода-вывода за единицу времени), т е IOPS.
Для дисков этот параметр лежит в диапазоне от 50 до 200 на шпиндель, в зависимости от говенности диска.
200 процессов решили прочитать данные с диска, которые не в кэше - вот сразу минимум 200 IOPS.
И линейное чтение из приведенных выше мало характеризует рандомное чтение с диска

anonymous ()
Ответ на: комментарий от anonymous

Значит закручивай их сильнее, пока пиковая нагрузка не станет удовлетворительной.

slowpony ★★★★ ()

Под интенсивной нагрузкой опция монтирования noatime будет очень полезна. А ещё можно сделать что нибудь вроде tar - cvf /dev/null /var/www/html при загрузке, тоже помогает.

Nastishka ★★★★★ ()
Ответ на: комментарий от anonymous

Всем спасибо за помошь. Было решено создать кеш nginx на ssd диске, где крутиться БД. Лимиты пока трогать не буду.

dert12 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.