Администрирование сервера

Почему тормозит CentOS 7 или CloudLinux 7, а I/O Wait 99%?

Почему тормозит CentOS 7 или CloudLinux 7

Периодически на сервере стали возникать проблемы IO диска и начинал тормозить CentOS 7 или CloudLinux 7, а apache зависать на php процессах. Программа iotop показывала, что иногда php скрипты вдруг как будто заедали, переставали работать и начинали копиться процессы и при этом показывали нагрузку IO в 99%. Что приводило к зависанию http сервера. А то и могло привести к зависанию самого сервера.

Видно как CentOS 7 или CloudLinux 7 тормозит

Такие данные можно увидеть с помощью программы iotop.

Видно что нагрузка идет при большом количестве запросов от http сервера. От чего и тормозит ОС centos 7 или cloudlinux 7.

Ничего не менялось при использовать PHP как suPHP или FastCGI, и даже c модулем mod_lsapi.

Долгое исследование проблемы и обращение в поддержку CloudLinux открыли завесу тайны.

Что делать если тормозит CentOS 7 или CloudLinux 7?

Вы никогда не поверите откуда появилась проблема. Оказывается о нас позаботились разработчики ядра. Как так, ведь надо экономить энергию на планете и заботить об экологии, значит надо включить для процессора и дисковой системы экономичный режим по умолчанию.

Если вы наберете

# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Вы вдруг обнаружите откуда идут тормоза на CloudLinux или Centos. а ларчик открывается просто.

# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave

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

Режимы бывают

  • powersave — энергосберегающий (вообще всё тормозит, всегда. Часто та постоянно внизу.)
  • ondemand — меняет частоту по требованию (причем тормозит с IO wait хотя по идеи должен поднимать когда идет нагрузка)
  • performance — максимальная частота всегда.
  • и другие, которые нам не интересны.

О других режимах можно почитать тут.

Что бы спасти положение нам нужна частота максимальная всегда. Иначе для сайтов это постоянные тормоза, что бы раскручивать диск и выполнять процессы.

В CentOS 7 и Cloudlinux 7 есть отличная утилита, которая решает эту проблему. И задаёт постоянно максимальный режим.

Эта демон Tuned. По умолчанию он работает в режиме powersave или ondemand. Что для сайтов или хостинга грозит постоянным тормозами или медленной работой сайтов, вплоть до подвисания Apache сервера. Почему так сделано? Мне вообще это не понятно. Подробно о его проблемах можно почитать тут.

Поэтому мы смело устанавливаем максимальный режим.

# tuned-adm profile throughput-performance

После чего получаем на нашем сервере максимальную производительность и никаких тормозов.

Есть еще один узкий момент. Это драйвер intel_pstate. По словам поддержи CloudLinux он так же создаёт проблемы, поэтому если вы видите его вот так:

# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate

То можно смело его отключать.

Немного информации об этом драйвере можно почерпнуть информацию на этой странице.

Редактируем фаил /etc/default/grub

и добавляем в строку GRUB_CMDLINE_LINUX=" тут что то"

intel_pstate=disable

Например : GRUB_CMDLINE_LINUX=" тут что то intel_pstate=disable rhgb quiet"

Сохраняем.

Пересоздаём новый grub

# grub2-mkconfig -o /boot/grub2/grub.cfg

Перезагружаемся

# shutdown -r now

Всё. Надеюсь теперь ваша жизнь станет веселее, а клиенты не будут страдать от диких тормозов сайтов.

P.S. Если у вас Ubuntu или Linux Mint и тому подобное, то тоже можно ускорить, и избавиться от тормозов ОС. Особенно это актуально если у вас домашней комп на этой системе. Надо установить tuned-adm и использовать его. Вся информация на этой странице.

Либо выполнить

#sudo cpufreq-set -g performance

Для тех кого мало памяти на сервер, и он всё равно, иногда, наблюдаете такую проблему.

Если у вас мало памяти на сервере с Centos или CloudLinux , vps или vds, то cache с буферором будут сжирать у вас память. По идеи при нуждах программ они должны скидывать на диск и высвобождать часть. Но как показывает опыт, этот бред ядра Centos ни черта нормально не работает и похоже просто тупо не успевает сбрасывать лишний кэш. Часто может дойти даже до зависания.

Поэтому что бы высвободить память мы делаем такую вещь.

В файле /etc/sysctl.conf вносим:

vm.dirty_background_ratio = 10
vm.dirty_ratio = 40

После синхронизируем данные кэша и диска, очистим кэш и сохраним параметры:

sync; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Информация взята отсюда

После чего мы вносим в крон

# crontab -e
0 4 * * * sync; echo 1 > /proc/sys/vm/drop_caches

Подробно про чистку кэша и почему это приходится делать описано тут. Так же обратите внимание, что такая чистка не рекомендуется, так как из-за некоторых проблем вы рискуете создать проблемы с потерями каких либо данных. Подробно описано в источнике. Однако на слабых машинах я пока не вижу другого выхода. Если вы его знаете, напишите в комментариях.

На этом всё. Удачи с вашим сервером!

Если вам понравилась статья, и вы хотите быть в курсе новых статей, не забудьте подписаться на нашу группу ВКонтакте или другие социальные сети.

Наша группа ВКонтакте Мы в YouTube

Или репостните другу! Тем самым вы поддержите наш проект. Спасибо!

1 Comment

  1. Слава божественным силам и разработчикам CloudLinux! Наконец то кто то заметил этот глюк тормоза на CentOS 7. (видно поддержку CloudLinux затюкали)
    CloudLinux выпустил тюнер для своей операционной систимы. Не я серьезно! Это крутая штука. Борьба с глючными тормозами Centos всех уже порядком достала.
    Теперь ничего не надо делать в ручную. Просто поставьте эту программу
    http://docs.cloudlinux.com/index.html?tuned-profiles-cloudlinux.html

Leave a Reply

Theme by Anders Norén

Подпишись, и получи видео курс по HTML и CSS, БЕСПЛАТНО! А так же, ты будешь узнавать о новых статьях раньше других!

Введите Email. Гарантия защиты от спама 100%!

 

Подписывайтесь на обновления сайта в социальных сетях или RSS.

Наша группа ВКонтакте Мы в YouTube