На виртуальном хостинге действуют 2 лимита нагрузки:
- нагрузка на CPU веб-сервера;
- нагрузка на CPU сервера MySQL.
Нагрузка каждого клиента на CPU веб-сервера измеряется системой Process accounting в ОС Linux (подробнее).
Единица измерения - cp (cpu points) - количество минут, которые работали бы все задачи пользователя, нагружая одно ядро на 100%.
nobody 2646 1969622.74re 4.79cp 4478k
p777 252 182801.97re 4.35cp 43802k
p888 191 3925346.01re 2.43cp 36405k
p999 142 990.24re 2.41cp 41263k
...
В данном примере процессы пользователя p777 работали 4.35 минуты.
Собранные данные каждый час обнуляются и записываются в базу данных биллинга. Если заказ за прошедший час превысил часовую норму нагрузки своего тарифа (1/24 ≈ 4.2%), следующий час процессы работают с пониженным приоритетом относительно других заказов (nice level). При уменьшении нагрузки, приоритет восстанавливается.
Такой алгоритм позволяет не останавливать работу сайтов, если им временно требуется больше ресурсов (например, при индексации поисковыми системами), а просто немного замедлять.
По техническим причинам на серверах с панелью управления cPanel невозможно менять nice level для скриптов конкретного заказа. Поэтому при регулярном превышении нагрузки на CPU веб-сервера, мы вынуждены будем остановить работу такого заказа.
Нагрузка на CPU сервера MySQL измеряется системой Percona User Statistics (подробнее) в секундах работы.
mysql> select substring_index(USER, '_', 1) `order`,sum(CPU_TIME) cpu
from information_schema.user_statistics where user like 'p%' group by `order`
order by cpu desc limit 30;
+-------+------+
| order | cpu |
+-------+------+
| p777 | 241 |
| p888 | 66 |
| p999 | 62 |
...
В данном примере, SQL-запросы заказа p777 работали 241 секунду.
Собранные данные каждый час обнуляются и записываются в базу данных биллинга. Если заказ за прошедшие сутки потребил ресурсов больше, чем положено по тарифу, клиенту отсылается предупреждение.
Если превышение происходит регулярно, (например, средняя нагрузка за неделю гораздо выше разрешённой, равномерна и не уменьшается) мы можем заблокировать базу, создающую нагрузку.
Обращаем ваше внимание, что сайт или база могут быть заблокированы без предварительного уведомления, если нагрузка, которую они создают, отрицательно сказывается на качестве работы ресурсов других клиентов и не может быть уменьшена стандартными средствами. Чаще всего такое возникает, если заказ оказывает большую дисковую нагрузку на сервера.