Skip to content

Тестирование производительности сервера: Apache Bench против Siege

10/02/2010

Последнее время я снова взялся допиливать limestone. И кроме того, так как блог заработал более-менее нормально, пришло время проверить его на прочность под многопользовательской нагрузкой. В общем, отправился я на поиски инструмента нагрузочного тестирования.

Apache Bench

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

apr_poll: The timeout specified has expired (70007)

Ab выполнял несколько запросов (примерно 35-40 из 100) и выдавал эту ошибку. Понятно что где-то истекает таймаут, но непонятно где. После нескольких дней напряжённого дебага оказалось что таймаут истекает в самом ab, и что Node здесь ни при чём. Даже после апгрейда части системы и самого ab всё чего удалось добиться — повышение количества запросов перед ошибкой. Теперь успевало выполняться примерно 70 запросов.

В общем, для тестирования это явно не подходило. И уже готовясь спать, я вспомнил что когда то читал о нагрузочной утилите siege, и твёрдо решил с утра её попробовать 🙂

Siege

Установка оказалась простой, как и большинство других:

apt-get install siege

Утилита оказалась сразу готова к работе. После недолгого изучения мануала я таки смог протестировать свой сервер 🙂 Среднее время ответа порадовало, nginx не подвёл, Node справилась на отлично. Правда в самом коннекторе обнаружилась пара ошибок: нагрузочное тестирование похоже переполняло пул соединений в Sphinx. Я помню что в Sphinx был режим постоянных соединений, и попробую его реализовать. Сейчас я использую отдельное подключение для каждого клиента. Кстати, в таком случае их обязательно надо закрывать после использования: Node после обслуживания пользователя работает дальше, и PHP-шный путь «let it crash» здесь не работает.

Кстати, количество соединений можно посмотреть командой netstat -a -n. У меня обнаружилась куча соединений в состоянии CLOSE_WAIT: т.е. одна из сторон не закрывает соединение как положено. Причём соединений siege с Нодой в таком состоянии гораздо больше чем соединений Node со Сфинксом.

Итак, небольшой роадмап исследования и разработки коннектора:

  • Реализовать режим постоянных соединений
  • Сделать подробный вывод сообщений об ошибках: Server thrown Error явно недостаточно, тем более что с кодом ошибки от сервера приходит и её описание
  • Получше понять механизм получения ответов от сервера, в частности события «receive» и «eof». Пока я пользуюсь только первым, но полагаю что второе тоже нужно. Я это увидел в коннекторе Tokyo Tyrant, кажется что к Sphinx это тоже применимо
Реклама
5 комментариев
  1. Удивительно что ab не работает — всегда считал его очень надежным инструментом. А что за операционная система у тебя?

    • Debian Lenny. Уже после замены ab на siege я встречал в Google-группах упоминание что в некоторых Debian-дистрах ab ведёт себя странно.

      Мой uname -a:
      Linux debian 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686 GNU/Linux

  2. ev-kov permalink

    ab и на win системах вываливается с ошибкой «apr_poll: The timeout specified has expired (70007)»

    • На mac os последней та же фигня, при чем демона не убивает после выхода и нода вываливается с ошибкой переполнения памяти.

  3. http://loadimpact.com/ — вот хорший инструмент для тестирования, в принципе хвататет и бесплатной версии

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: