Назад | Перейти на главную страницу

Как проверить пропускную способность сервера

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

Введите node.js, который полностью основан на событиях, поэтому он никогда не блокируется. Если я запускаю тест apache на простом сервере hello world, он может обрабатывать 2500 запросов в секунду или около того.

Однако, если я поставлю тайм-аут в функции hello world, чтобы она ответила через 2 секунды, тест apache сообщает о резком снижении пропускной способности: около 50 / с. Я использую 100 одновременных подключений к ab. Если я увеличу параллелизм, он возрастет. Это имеет смысл, потому что тест apache в основном отправляет запросы партиями по 100, которые возвращаются каждые 2 секунды. 100 запросов / 2 секунды = 50 запросов / секунду

Если я увеличу параллелизм примерно до 400 или 500, он начнет вылетать. Я не думаю, что достиг предела node.js, я думаю, что упираюсь в стену в моей операционной системе по количеству открытых файловых дескрипторов, сокетов или чего-то еще.

В любом случае я могу точно предположить, сколько запросов может обработать мой сервер? Я хочу убедиться, что проблема не в тестовом компьютере.

Несколько вещей, которые могут быть не совсем актуальными.

Во-первых, поскольку вам нужно поддерживать открытыми 500 подключений в течение нескольких секунд, вы, вероятно, достигнете максимального числа открытых дескрипторов файлов, которое, вероятно, установлено на 1024. Проверьте файлы журнала, и если вы можете увидеть такие ошибки, как too many open files. Попробуйте отредактировать /etc/security/limits.conf и увеличьте количество файловых дескрипторов для пользователя apache.

Во-вторых, мне кажется, что ваш тест не отражает ожидаемого вами использования. Вы тестируете систему, в которой подготовка страницы занимает много времени (например, требуется сложный запрос к базе данных), и клиент терпеливо ждет ее, а не страницу, управляемую событиями. Я не знаю node.js, но предполагаю, что он будет запрашивать данные с сервера по мере необходимости в нескольких небольших запросах, причем каждый запрос для сервера является независимым. Есть ли и большие запросы? Как с ними обращаются? Клиент их ждет или опрашивает сервер, чтобы проверить статус?

Для тестирования, ab кажется довольно ограниченным в том, что он может делать. Вы можете попробовать другие утилиты. Быстрый apt-cache search вырастил несколько (не использовал), вроде httperf, hammerhead

Может быть, подключится другой человек с большим опытом веб-тестирования.

Что такое «оно» в «он начинает вылетать»? Инструмент для тестирования производительности или что-то еще на сервере? И получаете ли вы вообще какие-либо отчеты об исключениях непосредственно из отказавшего компонента или выводите их в файлы журнала?

Если проблема в ab (программе тестирования) не нравится такое количество активных подключений, попробуйте запустить несколько экземпляров одновременно.

Если это ОС (или какое-то взаимодействие между ab и ОС), налагая ограничение, попробуйте несколько копий ab но выкладываю на разные машины. Виртуальные машины на одном хосте могут работать, если у вас нет запасных физических машин, которые можно было бы попробовать.

В любом случае (на стороне сервера или на стороне клиента) ваша догадка об ограничениях на количество открытых сокетов может быть верной.

Используйте IBM RATIONAL PERFORMANCE TESTER для тестирования сервера, он предоставит вам результаты в виде графиков и таблиц, которые показывают полученные и отправленные байты.