Как правильно настроить лимиты
Выбор значения лимита процессора
Рекомендуемое значение лимита процессора (CpuL
) для shared
хостинга от 100%
(одно ядро) до 200%
(два ядра).
При достижении лимита, система автоматически замедляет работу процессов пользователя, чтобы использование процессора (CPU) не превысило лимит.
Это значит, что планировщик операционной системы на время приостанавливает процесс пользователя и право использовать процессор переходит процессам
других пользователей. На такое переключение между процессами тратится процессорное время. Поэтому не рекомендуется устанавливать значение лимита CpuL
в значения меньше чем 100%
(меньше чем одно ядро), поскольку это может привести к слишком частым переключениям между процессами и повышенной нагрузке
ядра ОС на процессор (параметр %sys
в утилите top
).
Рекомендуется периодически смотреть статистику использования ресурсов для сайтов пользователя. Если статистика ls-stats
постоянно показывает большое
число (>700 в минуту) ошибок выделения процессора (CpuF
), то возможно требуется более высокое значение лимита процессора CpuL
. Рекомендуется посмотреть
вывод утилиты ls-stats-snapshot
за период времени, когда было много ошибок выделения процессора, чтобы понять, какие именно процессы пользователя создали
высокую нагрузку, и можно ли оптимизировать нагрузку.
Ошибки выделения процессора не приводят к ошибкам в работе сайтов. Сайты пользователя просто работают медленнее. Поэтому, выбор лимита зависит от желаемой скорости работы сайтов.
Выбор значений лимитов оперативной памяти, свопа и числа процессов
Правильный выбор значений лимитов оперативной памяти, свопа и числа процессов более сложен и более критичен для стабильной работы сайтов пользователей,
чем лимит процессора (CpuL
). Достижение лимита процессора не ломает работу сайтов, сайты просто начинают работать медленнее. А вот достижение лимита
памяти или числа процессов может приводить к ошибкам в работе сайтов, поскольку невозможность выделить память или создать процесс обычно приводит к ошибке
обработки запроса к сайту. Сложность определения требуемых значений лимитов памяти и числа процессов заключается в том, что эти значения лимитов зависят от
нескольких факторов.
Значения лимитов оперативной памяти (MemL
) и свопа (SwapL
) зависят от потребностей сайтов и приложений пользователя и от количества этих сайтов и приложений,
поскольку лимитируется суммарное использование ресурсов всеми процессами пользователя. Типовое значение лимита оперативной памяти MemL = 1 Gb. Значение лимита
свопа (SwapL
) обычно устанавливается в то же значение, что и лимит оперативной памяти. Своп используется, когда свободная оперативная память исчерпана.
Потребность сайтов пользователя в памяти зависит от режима запуска php
. Если используется режим запуска, когда процесс php
демонизируется, то есть не умирает
после обработки одного запроса, а работает длительное время и обрабатывает много запросов (например, при использовании mod_fcgid
или php-fpm
), то в таком режиме
увеличивается потребность сайтов в памяти, что может потребовать более высокое значение лимитов. А в режиме, когда процесс php
умирает после обработки запроса
(например, при использовании cgi
или suphp
), суммарное использование памяти сайтами пользователя будет меньше, поэтому значение лимита может быть снижено.
Объем памяти, требуемый для работы сайтов пользователя, может зависеть от числа этих сайтов, потому что в режимах с демонизацией php
, для каждого сайта (домена)
запускается один (или несколько) процессов php
, которые обрабатывают запросы к этому сайту. Чем больше у пользователя доменов, тем больше процессов будет работать
и выше использование памяти. Сколько веб-сервер будет создавать процессов для каждого домена и как долго эти процессы будут существовать, зависит от настроек
веб-сервера. Например, с настройкой mod_fcgid
можно ознакомиться тут: https://docs.msvsphere-os.ru/hosting-help/mod_fcgid_tunning.html
Таким образом, значения лимитов могут сильно отличаться для разных конфигураций веб-сервера, для разных сайтов и разных хостинговых пользователей. Общая рекомендация
состоит в том, чтобы выставить для пользователя значения лимитов оперативной памяти (MemL
) и свопа (SwapL
) в 1 Gb каждый лимит, а затем смотреть статистику нагрузки
для этого пользователя. Если статистика ls-stats
показывает много ошибок выделения памяти (MemF
) или свопа (SwapF
), это значит, что нужно либо повышать лимиты памяти
и свопа, либо возможно требуется настройка веб-сервера, как описано в статье выше. Рекомендуется посмотреть вывод утилиты ls-stats-snapshot
за период времени, когда
было много ошибок выделения памяти или свопа, чтобы понять, какие именно процессы пользователя создали высокую нагрузку, и можно ли оптимизировать нагрузку. Со временем,
при создании пользователем всё новых и новых сайтов, может потребоваться увеличение значений лимитов.
Аналогичную методику можно применить и при настройке лимита числа процессов (NprocL
). Значение лимита NprocL
зависит от числа сайтов пользователя
(больше сайтов = выше лимит), от режима запуска php
(при демонизации php
число процессов выше, чем без демонизации), от настроек веб-сервера
(сколько процессов запускает веб-сервер для каждого сайта пользователя). Поэтому, рекомендуется установить лимит процессов NprocL
в значение от 50 до 100,
и смотреть статистику использования ресурсов сайтами этого пользователя. Если статистика ls-stats
показывает много ошибок создания процессов (NprocF
),
это значит, что нужно либо повышать лимит числа процессов NprocL
, либо возможно требуется настройка веб-сервера, как описано в статье выше. Со временем,
при создании пользователем всё новых и новых сайтов, может потребоваться увеличение значения лимита NprocL
.