Как распределяется нагрузка на сервер?

Djaarf
На сайте с 16.12.2008
Offline
15
956

Здравствуйте! Подскажите пожалуйста у кого есть опыт:

пишу скрипты (PHP), оптимизирую оптимизирую оптимизирую...

Хотелось собственно узнать будет ли нагрузка на сервер в 1000 раз больше, если одновременно вызовут скрипт 1000 пользователей. Точнее время выполнения, например 0.021 сек. Если обратятся 1000 пользователей то будет 21 сек? Сдается мне, что это не так...

Если кто знает формулу, как расчитывать такие вещи, поделитесь пожалуйста.

V
На сайте с 25.07.2006
Offline
128
#1

Если 1000 запустятся одновременно, то сервер скорее всего упадет ;)

На практике количество процессов апача обычно ограничено сотнями. Причем это делается в расчете, что большинство процессов будут выполнять нересурсоемкие медленные запросы, например к статическим картинкам.

Но даже 10 одновременно выполняющихся скриптов означают нагрузку больше 100% даже для восьмиядерного сервера.

В реальности сервер не должен обрабатывать больше чем несколько скриптов одновременно. Он должен успевать выполнить один скрипт до того, как придет следующий запрос. Иначе количество активных процессов апача будет накапливаться как снежный ком, вызывая нестабильность системы.

fastcgi лишен этого недостатка. Обычно под ним запускается ограниченное число процессов. Пришедшие избыточные запросы будут ждать в очереди или же будут отфутболены.

Подсчет времени выполнения скрипта может иметь смысл для определенного промежутка времени. Например, один запрос выполняется за 0.021с, значит 1000 восполняются в сумме 21с, следовательно сервер может обработать ~50 запросов в секунду. А если у сервера 4 ядра, то ~200 запросов в секунду.

Но есть большое НО. Это все умозрительные вещи. На практике такие расчеты редко соответствуют истине. Например, если скрипт работает с файлами или с базой, то ни на какую линейность зависимости рассчитывать нельзя. Вполне может быть, что один скрипт выполнится за 0.02с, десять последовательных за 0.5с, а 10 одновременных - за 1с. А может и все наоборот...

Самое разумно, что можно делать - это тестировать производительность в условиях, приближенных к реальности. Хотя бы с помощью апачевской утилиты ab

Будет наглядно видно, как ведет себя скрипт при большой нагрузки и при разном числе одновременных запросов.

Приватный linux-администратор
Djaarf
На сайте с 16.12.2008
Offline
15
#2

Понятно. Спасибо, про

количество активных процессов апача будет накапливаться как снежный ком

подозревал. Почитаю про fastcgi

Andreyka
На сайте с 19.02.2005
Offline
822
#3

Как работать с нагрузкой сервера - сначала смотрим в top, какой % идет на пользовательские процессы

Если >80, поздравляю - включайте профилирование и доделывайте скрипты

Если <80, возможно на сервере не очень оптимальные настройки

А если вся нагрузка идет в idle, значит вы за свои деньги отапливаете ДЦ :)

Не стоит плодить сущности без необходимости

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий