Этот вопрос беспокоит меня, и я не думаю, что сам найду ответ, поэтому решил, что лучше всего будет обратиться за помощью.
Когда я делаю:
root@server1:~$ ab -n 20 -c 20 http://www.testserver.com/
Продолжительность 4 секунды.
Когда я это сделаю (одновременно):
root@server1:~$ ab -n 10 -c 10 http://www.testserver.com/
root@server2:~$ ab -n 10 -c 10 http://www.testserver.com/
Общая продолжительность составляет 2,5 секунды.
Я должен думать, что тестовый сервер не беспокоит место, откуда приходят запросы, и я предполагаю, что тестовый сервер, а также server1 и server2 не достигают предела пропускной способности (страница не такая уж тяжелая).
Чем это вызвано? Ответ, вероятно, будет действительно глупым, но я все равно буду счастлив.
Есть некоторые типы нагрузки, при которых повышенный параллелизм приводит к падению производительности. Первое, что приходит мне в голову, это последовательное чтение жесткого диска - вы получите лучшую общую производительность, если у вас есть один поток для чтения большого файла.
Вам необходимо изучить нагрузку на сервер и найти узкое место.
Также 10 запросов - это слишком мало, чтобы делать какие-либо выводы. Правильное тестирование требует, чтобы вы контролировали процесс работы системы и определяли период прогрева системы, когда факторы нагрузки стабилизируются. После разминки вы можете запускать реальные тесты и статистически исследовать их результаты, чтобы убедиться, что они действительны.
Когда вы запускаете 1 процесс, весь процессор просто работает для этого одного процесса. (ок, и немного для ядра). Когда вы запускаете 2 процесса, ядро должно переключаться между ними, и при каждом переключении оно должно сохранять некоторые данные для оперативной памяти, а затем извлекать их, что вызывает некоторые накладные расходы, поэтому - больше процессов - больше накладных расходов.
Кроме того, это зависит от того, сколько рабочих apache запущено в данный момент. Если запущено 10, им просто нужно серверить страницу. Если вы запускаете 20 параллельных подключений, нужно запустить еще 10 работ, которые используют ресурсы (или запросы должны ждать).