Существует ряд ограничений по потреблению ресурсов, которые относятся к
процессам и файлам пользователей хостинга. В данном документе мы постарались
описать основные ограничения, а также наиболее частые причины возникаюших
из-за этого сложностей. В соответствии с устоявшейся профессиональной
терминологией, мы будем называть ограничения лимитами (от
англ. limits).
Итак, ограничения или лимиты налагаются на работу большинства Ваших
процессов, запущенных на хостинговой машине. Делается это для того, чтобы :
1.Не допустить влияния неправильно работающих процессов одних пользователей
на процессы других пользователей. То есть, если Ваша программа работает
неправильно и пытается занять все ресурсы хостинговой машины, ей это сделать
не дадут. Она получит лишь часть ресурсов пропорционально текущим запросам
других пользователей.
2. Не давать неправильно работающим программам создавать на диске сервера
слишком большие файлы. Как Вы знаете, пользователь отдельно оплачивает
превышение уже предоплаченного дискового пространства, так что если Ваша
программа случайно создаст слишком большой файл, это негативно отразится на
списаниях с Вашего лицевого счета. Чтобы этого не произошло и существуют
некоторые ограничения.
Мы постоянно вводим в эксплуатацию новые серверы, модернизируем старые и
применяем другие самые современные технические
решения для того, чтобы обеспечить максимально быструю работу Ваших
сайтов. Однако, к сожалению, не всегда программы абонентов работают
правильно, из-за чего и возникают ситуации, когда нам приходится влиять на
процесс их функционирования. Так мы избавляем других абонентов от
негативного влияния неправильной работы отдельных запущенных пользователями
программ. Существует специальный документ "Техническая политика", в котором
описываются основные подходы к обеспечению надлежащего качества
предоставляемых услуг.
В этом же документе мы приводим основные лимиты и настройки, а также даем
Вам возможность понять, почему у Вас возникли или могут возникнуть сложности
с этими конкретными ограничениями.
Использование памяти
Соединения к базе данных MySQL
Для того, чтобы работать с базой данных MySQL, Ваша программа должна
установить соединение с ней. Как правило, одновременно используется
несколько соединений, так как обычно запущено несколько программ
одновременно. Происходит это из-за того, например, что на сайт одновременно
заходит несколько посетителей. У нас существует ограничение на количество
одновременных подключений к MySQL-серверу. В зависимости от тарифного плана
это может быть или 20 или 30 подключений в одно и то же время.
Если Вы столкнулись с данным ограничением, Ваша программа получит
соответствующию ошибку, после чего нужно будет задуматься об оптимизации.
Как правило, доступного количества соединений хватает подавляющему
большинству пользователей. Скажем больше, реально достигали заявленных
ограничений единицы пользователей. Это говорит о том, что даже 20 соединений
более чем достаточно для нормальной работы.
Если же Вы все-таки получили ошибку, значит или Ваш проект настолько
серьезен, что "не умещается" в рамки традиционного хостинга или же Вы
неправильно пишете свои программы. Да, сначала подумайте об оптимизации.
Если Вы пишете на языке PHP и не знаете что делает функция
mysql_pconnect, Ваша проблема наверняка решена - прочитайте
документацию. Наверняка поможет. Если Вы пишете на Perl, постоянные
соединения в этом языке реализованы несколько сложнее, но все равно есть и
работают. Почитайте про использование модуля Apache::DBI тут.
Использование процессора (cputime)
Это ограничение реализовано на базе стандартных
возможностей ОС FreeBSD. Каждый процесс (программа) запущенный
пользователем на нашем сервере, может потребить определенное количество
ресурсов центрального процессора (CPU), после чего такой процесс получит
сигнал о немедленном завершении. То есть, Ваш процесс не может использовать
процессор бесконечно.
Существует ограничение на использование процессора. В зависимости от Вашего
тарифного плана Ваши процессы могут использовать от 10 до 30 секунд времени,
которое центральный процессор реально потратит на обработку Вашей задачи.
Узнать сколько конкретно времени процессора доступно Вашим процессам можно в
описании конкретно Вашего тарифного
плана.
Процессорное время не соответствует обычному течению времени. Процессорное
время - это реальное количество секунд, которое было затрачено процессорами
на выполнение кода вашей задачи. Как правило, параллельно обслуживаются
несколько программ. Кроме того, не все время программа пользуется
процессором - она ждет результатов ввода/вывода, работает с диском и так
далее. Не нужно думать, что, допустим, через 10 секунд после запуска Ваш
процесс будет принудительно завершен. Наверняка он проработает больше.
Кроме того, если Вы столкнулись с ограничениями на процессорное время,
наверняка была допущена ошибка на этапе разработки Вашей программы.
Подумайте сами, если Ваша программа не смогла отработать за несколько
десятков секунд на современном серверном процессоре Intel Pentium III XEON,
наверняка она что-то делает не так. Кстати, наверняка эти секунды
пользователь, который обратился к Вашему сайту, ждет ответа сервера.
Наверняка он просто уйдет пока Ваша программа "думает". Именно по этому
веб-приложения должны быть спроектированы так, чтобы отдать пользователю
ответ на его запрос максимально быстро. Быстро это максимум секунда или две.
Минимальное ограничение на работу одного процесса - 10 секунд. За это время
пользователь наверняка просто уйдет нажав кнопку "Esc" в своем браузере.
Одним словом, веб-приложения не должны потреблять много процессорного
времени.
Использование памяти (datasize)
После того, как операционная система произвела первоначальный запуск Вашей
программы, она начинает размещать в физической памяти (ОЗУ, RAM)
хостингового сервера свои данные. То есть, она использует память. Так как
все запросы, которые делаются пользователями Вашего веб-сервера, сначала
обрабатываются программой Apache, ограничение, конечно, в первую очередь
затрагивает именно CGI-процессы, которые запускаются программой
веб-сервером. Это особо отмечается.
Каждая запущенная программа может занять не более такого количества памяти,
которое соответствует Вашему тарифному плану. Если программа превысит этот
предел, она совершит аварийное завершение. Хорошо написанные CGI-программы,
к которым в данном контексте относятся например скрипты на Perl, shell или
CGI-версии интерпретатора PHP, не могут занимать много памяти. Это, как и
чрезмерное потребление других ресурсов, идет в разрез с CGI-идеологией,
которая подразумевает быстрое выполнение пользовательской задачи с
немедленной выдачей результата.