Уменьшаем потребление оперативной памяти на VPS

Тема еще тот баян-бабаян, но я оставлю эту запись здесь, чтобы потом не забыть, как что делать :-)

 Статьи   Время чтения: 3 минуты   Просмотров: 11

Уменьшаем потребление оперативной памяти на VPS

Тема еще тот баян-бабаян, но я оставлю эту запись здесь, чтобы потом не забыть, как что делать :-)

Подобная заметка появилась на Хабре еще в 2009 году. В заголовке статьи утверждалось о снижении потребления памяти в 2 раза. Подтвердить такое снижение я не могу, но небольшой эффект 10-20% вроде бы есть.

Итак, что мы имеем:

На каждый запущенный тред в виртуальной памяти выделяется место под стек. По умолчанию это место = 10М. Берем какой-нибудь apache с mpm_worker (который создает кучу тредов), запускаем под OpenVZ — тратятся сотни мегабайт памяти.

Это весьма много. Будем резать.

Уменьшить размер стека по умолчанию можно командой ulimit -s <размер стека на тред в Кб>. Параметр меняется для программ, запущенных из текущего шелла (ну иерархически тоже ессно). Запускаем эту штуку при загрузке системы (внутри скрипта, стартующего демоны) — и все.

Чтобы это сделать, нужно вписать строку ulimit -s 1024 в файл /etc/rc в самый верх. etc/rc — это симлинк и в CentOS, например, сам файл находится в директории /etc/rc.d. Некоторые «советчики» рекомендуют править файл rc.local, но этот совет — галимое плацебо, rc.local запускается в самом конце и никак не поможет делу…

Еще советуют выставлять лимиты в /etc/security/limits.conf. В принципе, как вариант, но лениво :-)

Для тестирования всего этого дела, если боязно лезть сразу в /etc/rc, можете

  1. посмотреть, сколько занимает в памяти какой-нибудь процесс

  • в шелле ввести ulimit -s <сколько-нибудь, в килобайтах>

  • перезапустить процесс (что-нибудь в духе /etc/init.d/mysql restart)

  • посмотреть еще раз, сколько теперь занимает, и проверить, что все работает

Вообще ulimit предназначен для контроля ресурсов и может ограничивать не только размер стека.

Рассмотрим использование ulimit на примере ограничений пользователя worker

Добавим в конец /etc/profile:

   ulimit -c 0 # Запрещаем создавать core файлы
   ulimit -d 48000 # Ограничиваем максимальный размер сегмента данных в 48 MB
   ulimit -s 1024  # Ограничиваем максимальный размер стэка в 1 MB
   ulimit -m 48000 # Ограничиваем максимальный размер резидентной части процесса (находящейся в ОЗУ) в 48 MB
   ulimit -u 64    # Ограничиваем максимальное число запущенных этим пользователем процессов.
   ulimit -n 128   # Ограничиваем максимальное число открытых файлов.
   ulimit -f 100000 # Ограничиваем максимальный размер создаваемого файла в 100 MB
   ulimit -v 100000 # Ограничиваем максимальный размер используемой виртуальной памяти в 100 MB

Для просмотра текущих установок нужно набрать ulimit -a

Оптимизация производительности Apache в CentOS

Статья актуальна для серверов с небольшим объемом оперативной памяти и когда Apache использует MPM модуль Prefork. Он используется по-умолчанию при установке Apache на CentOS 7. Проверить можно командой в консоли:

apachectl -t -D DUMP_MODULES |grep mpm

Вы должны увидеть mpm_prefork_module (shared)

Оптимальная конфигурация Apache

Отредактируйте файл httpd.conf, добавьте в него нижеследующий код. Параметры сбалансированы для сервера с размером оперативной памяти 512 МБ:

KeepAlive Off

    StartServers        2
    MinSpareServers     6
    MaxSpareServers     12
    MaxClients          15
    MaxRequestsPerChild 3000

В качестве альтернативного варианта этот код можно внести в отдельный файл с расширением .conf и сохранить его в директории /etc/httpd/conf.d. После внесения изменений в конфигурационные файлы не забудьте перезапустить вебсервер Apache:

apachectl restart


Автор: Google
Источник: blanet.ru

Последние страницы

Copyright © 2022 Blanet.Ru. Все права защищены.