Я не понимаю производительность, которую я вижу от apache. Я ожидал, что большее количество одновременных запросов apache будет работать лучше, чем меньшее, до определенного момента, но за пределами 3 одновременных запросов общая производительность остается неизменной. Например, я вижу одни и те же запросы в секунду, если у меня есть 3 или 4 одновременных запроса. С каждым дополнительным параллельным запросом среднее время ответа увеличивается, так что общая скорость обработки запроса остается неизменной.
Чтобы проверить это, я создал новый ubuntu 10.04 vm на slicehost. Это 4-х ядерный vm. Я установил это с
aptitude update
aptitude install apache2 apache2-utils curl
curl localhost/ # verify hello world static page works
Затем я измерил время отклика и запрос / сек.
Редактировать 4: Я тестировал что-то вроде «for x in $ (seq 1 40); do ab -n 10000 -c $ x -q localhost / | grep any; done».
Точные команды и данные находятся на https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AurdDQB5QBe7dGtiLUc1SWdOeWQ4dGo3VDI5Yk8zbWc&output=html
Во время выполнения тестов загрузка процессора составляла около 25% на каждом ядре.
Изменить 2: использование памяти было 45/245 МБ в соответствии с htop.
Изменить 1: я просто попробовал то же самое на ubuntu 11.04 vm, и общая проблема такая же, но производительность еще хуже: она составляет около 2100 запросов / сек для большинства уровней параллелизма и использует около 50% ЦП на каждое ядро .
Изменить 3: я попробовал его на реальном оборудовании и увидел пиковые запросы в секунду около 4 или 5 одновременных запросов, а затем он немного упал и выровнялся.
Может ли кто-нибудь объяснить, почему это происходит, как я могу выяснить, в чем проблема, или как я могу это исправить? Я поискал и не нашел ответов.
Я не понимаю производительность, которую я вижу от apache. Я ожидал, что большее количество одновременных запросов apache будет работать лучше, чем меньшее, до определенного момента, но за пределами 3 одновременных запросов общая производительность остается неизменной.
Похоже, вы видите именно то, что ожидали. Чем больше одновременных запросов, тем выше производительность Apache, вплоть до определенного момента, а затем производительность остается неизменной. Что вас удивило, так это то, что проблема возникает при небольшом количестве одновременных запросов.
Не знаю, почему вы находите это удивительным. Здесь нет реального дискового ввода-вывода, поскольку страница наверняка находится в ОЗУ. Так что это чисто деятельность, связанная с процессором и сетью. Как только у вас будет достаточно запросов, чтобы вы могли связать все ядра и заполнить сеть одним запросом, будет ли расти другой запрос, нет никаких причин, по которым большее количество ожидающих подключений может улучшить ситуацию.
Так что остается только вопрос о том, что является ограничивающим фактором. Трудно сказать без более подробной информации, но я бы посмотрел на объем использования ЦП системы и пропускную способность сети. Скорее всего, ЦП или сетевой интерфейс перегружены.
Ознакомьтесь с (еще не официальной) документацией по производительности в Apache httpd wiki:
http://wiki.apache.org/httpd/PerformanceScalingUp
Заключительное слово: я не знаю, что означает «виртуальная машина» в вашем случае, но это может быть узким местом в производительности.
Вероятно, вы заметите влияние накладных расходов на сетевой стек. При увеличении параллелизма у вас будет открываться больше одновременных подключений, поэтому системе и apache придется усерднее работать, чтобы открывать и закрывать эти подключения. Обычно это снижает производительность Apache и приводит к увеличению среднего времени выполнения запроса на уровнях параллелизма.
Я также подозреваю, что у вас было больше дочерних процессов Apache, работающих на более высоких уровнях параллелизма. Это требует времени, чтобы раскрутить их вверх и вниз.
Проблемы с сетью могут быть еще более сложными, если вы запускаете тест в той же системе, что и веб-сервер.
Настройка стека TCP / IP, настроек KeepAlive (если включено) и таймаутов может улучшить это.
Однако это давно известная проблема масштабирования apache.
Вот классическая статья по этой теме. PDF: http://www.stdlib.net/~colmmacc/Apachecon-EU2005/scaling-apache-handout.pdf