Альтернативы ApacheBench для профилирования скорости моего кода - PullRequest
7 голосов
/ 03 ноября 2010

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

В частности, мне нужен инструмент, который

  • Отсылает ли HTTP-запросы по сети (не нужно делать что-то необычное)
  • Записывает время отклика с максимально возможной точностью (не менее нескольких миллисекунд)
  • Записывает данные о времени отклика в файл без дальнейшей обработки (или предоставляет их моему коду, если это библиотека)

Я знаю о ab -e, который печатает данные в файл. Проблема в том, что это печатает только данные квантилей, что полезно, но не то, что мне нужно. Опция ab -g будет работать, за исключением того, что она не печатает данные за доли секунды, что означает, что у меня нет нужного разрешения.

Я написал для этого несколько строк Python, но httplib ужасно неэффективен, и поэтому результаты оказались бесполезными. В общем, мне нужна лучшая точность, чем может дать чистый Python. Если у кого-то есть предложения по использованию библиотеки из Python, я все слышу.

Мне нужно что-то высокопроизводительное, воспроизводимое и надежное.

Я знаю, что половина моих ответов будет в духе "интернет-задержки делают такие подробные измерения бессмысленными". В моем конкретном случае использования это не так. Мне нужны детали синхронизации высокого разрешения. То, что действительно использовало мое оборудование HPET, было бы потрясающе.

Зачисление здесь щедрости из-за малого количества ответов и просмотров.

Ответы [ 6 ]

1 голос
/ 12 ноября 2010

httperf очень мощный.

1 голос
/ 11 ноября 2010

Хороший справочник инструментов тестирования производительности с открытым исходным кодом: http://www.opensourcetesting.org/performance.php

Вы найдете описания и «самый популярный» список

1 голос
/ 10 ноября 2010

Если вы можете кодировать на Java, вы можете посмотреть комбинацию JUnitPerf + HttpUnit .

Недостатком является то, что вам придется делать больше вещей самостоятельно. Но ценой этого вы получите неограниченную гибкость и, возможно, большую точность, чем с инструментами графического интерфейса, не говоря уже об разборе HTML, выполнении JavaScript и т. Д.

Есть также другой проект под названием Grinder , который, кажется, предназначен для аналогичной задачи, но у меня нет никакого опыта с ним.

1 голос
/ 06 ноября 2010

JMeter очень удобно.Он имеет графический интерфейс, с помощью которого вы можете настроить свои запросы и пулы потоков, а также может запускаться из командной строки.

1 голос
/ 03 ноября 2010

Я сделал это двумя способами.

С «loadrunner», который является замечательным, но довольно дорогим продуктом (от которого я думаю, что HP сегодня).

С комбинацией perl / php и пакетом Curl. Я нашел CURL API немного проще в использовании из PHP. Довольно легко накатить ваши собственные запросы GET и PUT. Я также рекомендовал бы вручную запускать некоторые примеры запросов с помощью Firefox и дополнения LiveHttpHeaders, чтобы зафиксировать точный формат запросов http, которые вам нужны.

0 голосов
/ 12 ноября 2010

Я использовал скрипт для управления 10 ящиками на одном коммутаторе, чтобы генерировать нагрузку путем «воспроизведения» запросов к 1 серверу. Время отклика моего веб-приложения (только для сервера) соответствовало нужной мне степени детализации, но мне было безразлично время отклика клиента. Я не уверен, что вы захотите включить поездку к клиенту и в нее в свои расчеты, но если вы это сделаете, это не должно быть сложно для кодирования. Затем я обработал свой журнал с помощью скрипта, который извлекал времена для каждого URL-адреса и делал графики графиков рассеяния и графики трендов в зависимости от нагрузки.

Это удовлетворило мои требования, которые были:

  • Реальное распределение звонков на разные URL.
  • Показатели трендов в зависимости от нагрузки.
  • Не влияет на веб-приложение, выполняя другие интенсивные операции в том же окне.

Я сделал контроллер в виде сценария оболочки, который на каждом сервере запускал процесс в фоновом режиме для циклического перебора всех URL-адресов в файле, вызывающих curl для каждого. Я написал обработчик журналов на Perl, так как в то время я делал больше Perl.

...