Мы разрабатываем веб-приложение, которое должно выдерживать заметную нагрузку. Я провожу свои тесты на сервере HP (Proliant DL 380) (два процессора Xeon 3,6 ГГц, 16 ГБ ОЗУ, ...). Я использую Apache JMeter и pylot для запуска нагрузочных тестов (они вроде как показывают похожие результаты).
В одном сценарии я настроил программу нагрузочного тестирования так, чтобы она обращалась к моей индексной странице, используя только один поток, насколько это возможно. Индексная страница весит около 60 КБ и состоит примерно из 10 вызовов ajax, множества кодов JavaScript и jQuery, требуемого CSS и т. д. Результаты, которые я получил, были, ну, разочаровывающими.
Полная страница index.jsp:
- Пропускная способность (треб/сек): 3,567
- Время отклика (сек): 0,278
Поэтому я удалил каждый вызов ajax, избавился от диаграмм, а также CSS (но не JS).
- Пропускная способность (треб/сек): 6,082
- Время отклика (сек): 0,161
Еще очень мало! Поэтому я создал статическую индексную страницу в формате HTML, которая содержит все данные одинакового размера (без каких-либо вычислений на стороне сервера и на стороне клиента).
- Пропускная способность (треб/сек): 20,787
- Время отклика (сек): 0,046
Ого, это был прорыв! Теперь я добавил некоторые коды JavaScript на страницу index.html.
- Пропускная способность (треб/сек): 9,617
- Время отклика (сек): 0,103
Ну, я думаю, узкое место найдено, коды Java Script. Мне нужно выяснить, сколько запросов в секунду может обрабатывать «сервер», и, поскольку java Script запускается на стороне клиента, я не думаю, что мне следует включать его в этот тест. Так должны ли инструменты нагрузочного тестирования обрабатывать коды JS? (похоже они этим занимаются)
Другой ключевой вопрос: в зависимости от оборудования, размера контента и вышеупомянутых конфигураций, правдоподобна ли такая пропускная способность? Разве я не должен ожидать большего? мое ожидание 500 запросов/сек! это единственное решение, добавляющее аппаратное обеспечение?!
Кстати, веб-приложение было создано с использованием Java+Struts2+JSP+Hibernate+MySQL. он также распространяется по нескольким серверам с использованием haproxy. но вышеупомянутые тесты проводились на одном сервере.