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

Слишком много запущенных процессов httpd и зависание сервера CentOS

Я запускаю веб-сайт с высоким трафиком на выделенном виртуальном сервере CentOS с 16 ГБ ОЗУ, размещенном на сервере Media Temple.
Очень часто сервер умирает из-за высокой загрузки ЦП (% 1500)
Когда я проверяю запущенные процессы с помощью команды «top», я вижу, что запущено слишком много процессов httpd, которые, как мне кажется, вызывают высокую загрузку ЦП.
Я попытался настроить mysql, настроить apache, my.cnf, httpd.cnf, удалил модули Apache, которые я не использую, но это не решает проблему.
Пожалуйста, дайте мне знать, какие значения вам нужно знать в конфигурации моего сервера, чтобы помочь мне диагностировать проблему.
Заранее спасибо.

что значит tail -f /var/log/messages скажите, когда вы испытываете высокие нагрузки на систему?

Ваши процессы очень сильно нагружают ввод-вывод или процессор?

Одно наблюдение:

Похоже, у вас 18 ГБ физической памяти, но нет места для подкачки ..., например ваш top команда показывает "Swap: 0k total" ... это означает, что у вас не настроено пространство подкачки.

В общем, в системе UNIX у вас всегда должно быть достаточно места для подкачки! Swap-size = 1 ... 2-кратный размер ОЗУ - хорошая идея. Хорошая идея - использовать быстрый раздел. Действительно плохие вещи случаются, если в вашей системе UNIX заканчивается ОЗУ и нет Swap .. процессы просто необъяснимо умирают .. это очень плохо! особенно в производстве. Диск дешевый! добавьте щедрый раздел подкачки! :-) или в худшем случае вы также можете создать файл подкачки позже.

В любой системе UNIX вам действительно нужно пространство подкачки, потому что именно там находятся процессы, пока они не запланированы на одном из процессоров. Если у вас нет места для подкачки, произойдут действительно плохие вещи, потому что в вашей системе не хватит мест (ОЗУ), где можно создавать новые процессы - она ​​не может поместить их в подкачку, потому что их нет, поэтому вы увидите чрезвычайно высокие нагрузки, система зависает, а процессы, казалось бы, умирают необъяснимо.

Чтобы проверить используемую память и пространство подкачки, вы можете запустить free -k. Вы также можете проверить конфигурацию подкачки, запустив swapon -s .. это не будет отображать никаких выходных данных, если не настроен своп.

Как правило большого пальца, настройте пространство подкачки примерно в 1-2 раза больше размера вашей физической памяти. Я бы сказал, что если у вас 18 ГБ ОЗУ, настройте ~ 20..30 ГБ Swap - не скупитесь на Swap, потому что «диск очень дешевый»!

Отказ от ответственности: есть несколько исключений, когда вы можете жить без свопа, но, с другой стороны, настройка и отсутствие необходимости в нем не повредит! :)

Два варианта создания пространства подкачки:

  • либо создайте раздел подкачки, предпочтительно на самом быстром разделе диска (лучший выбор; или добавьте флешку на свой физический сервер)

  • или создайте файл подкачки (если у вас нет места на диске для разделения; это также хороший вариант, если вы позже обнаружите, что вам нужно больше подкачки, чем вы ожидали)

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

После того, как вы включите пространство подкачки с помощью sudo swapon -a, вы должны увидеть его в списке top и с swapon -s , и ваша система должна вести себя намного лучше ..

Статьи о пространстве подкачки:

https://www.linux.com/news/software/applications/8208-all-about-linux-swap-space

https://www.linux.com/learn/tutorials/442430-increase-your-available-swap-space-with-a-swap-file

http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/

http://lissot.net/partition/partition-08.html

http://tldp.org/LDP/sag/html/swap-space.html

Некоторые указатели:

man -k swap

man mkswap

man fstab , vim /etc/fstab


РЕДАКТИРОВАТЬ

поскольку этот вопрос был перенесен в ServerFault .. Я добавлю здесь комментарий, потому что люди жалуются, что я цитирую старое правило: «1..2-кратный размер ОЗУ == Размер подкачки»

Накопитель SATA на 2 ТБ сегодня стоит около 70 долларов, а это значит, что 20 ГБ стоит около 70 центов - это очень дешево! Я знаю, что 20 ГБ - это много, но думайте об этом как об очень недорогой «страховке наихудший случай»!

Кто-то сказал: «Если ваша система заполнила 18 ГБ и переходит на 20 ГБ, тогда у вас большие проблемы»

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

Если бы у меня был сервер с 18 ГБ ОЗУ и на нем, например, запущен MongoDB (который очень интенсивно использует ОЗУ) ... Я бы определенно настроил очень большое пространство подкачки, возможно, даже 40..60 ГБ ... на случай, если что-то неожиданное пойдет не так ...

В вашем случае своп не нужен. Если вы хотите, вы можете создать раздел или файл подкачки размером 1-2 ГБ, чтобы иметь больше физической памяти для кеша файловой системы.

Я не понимаю, почему кешированная память и память буферов - 0. Можете ли вы вставить вывод cat /proc/meminfo ?

У вас очень высокая нагрузка ввода-вывода. Это может быть диск или сеть. Попробуйте снизить нагрузку. Для диска смонтируйте раздел данных с noatime. Try to find out which process is most I/O intensive. Useiotopanddstat` для этого.

Попробуйте обновить прошивку и дайверы (модули ядра) для контроллера диска и для сетевой карты. Если вы используете виртуальную машину, убедитесь, что вы устанавливаете драйверы паравиртуализации (например, VMware Tools). Если вы используете 32-битное ядро ​​с PAE, попробуйте переключиться на 64-битный дистрибутив (вы сократите время по сравнению с ядром).

Почти наверняка вашей машине не хватает памяти, потому что у вас слишком много «толстых» процессов Apache, которые мало работают или вообще не работают.

Apache обычно использует модель «prefork». PHP обычно выполняется внутри процесса. Это может быть проблематично из-за:

  • PHP заставляет дочерние процессы apache использовать много памяти каждый.
  • Обслуживание статических файлов по медленным соединениям позволяет использовать дочерние процессы в течение длительного времени без всякой причины.
  • Сообщения поддержки активности HTTP, если они включены, также позволяют использовать дочерние процессы.

«Плохим» решением было бы отключить пакеты поддержки активности (или, возможно, уменьшить время поддержки активности). Обратите внимание, что пакеты поддержки активности ОЧЕНЬ хороши для производительности, особенно на HTTPS.

«Лучшим» решением было бы перейти на лучшую архитектуру. Лучшей архитектурой была бы такая, в которой «жирные» процессы не тратятся впустую. Типичной реализацией лучшей архитектуры будет Nginx + PHP / FastCGI.

Я не обязательно выступаю за использование Nginx - вы, вероятно, могли бы сделать это и с Apache, если запустите другой MPM (модуль многопроцессорной обработки, например, worker, event, а не prefork) и переместите PHP из процесса с помощью FastCGI.

20 ГБ - очень много места подкачки 30 ГБ. Если вы меняете 20 ГБ в Linux, у вас большие проблемы.