Альтернативы ApacheBench для профилирования скорости моего кода
Я провел несколько экспериментов с использованием Apache Bench для профилирования времени отклика кода, и он не совсем генерирует правильные данные для меня. Надеюсь, у хороших людей есть идеи.
в частности, мне нужен инструмент, который
- делает HTTP-запросы по сети (не нужно делать очень необычные)
- записи время отклика как можно точнее (по крайней мере до нескольких миллисекунд)
- пишет Время отклика данных файл без дальнейшей обработки (или предоставляет его в мой код, если библиотека)
Я знаю, о ab -e
, который выводит данные в файл. Проблема в том, что это печатает только данные квантиля, что полезно, но не то, что мне нужно. The ab -g
опция будет работать, за исключением того, что она не печатает субсекундные данные, то есть у меня нет необходимого разрешения.
Я написал несколько строк Python, чтобы сделать это, но httplib ужасно неэффективен, и поэтому результаты были бесполезны. В общем, мне нужна лучшая точность, чем может обеспечить чистый Python. Если у кого-то есть предложения для библиотеки, используемой из Python, я все уши.
мне нужно что-то, что является высокопроизводительным, повторяемым и надежным.
Я знаю, что половина моих ответов будет примерно такой: "задержка в интернете делает такие подробные измерения бессмысленными.- В моем конкретном случае это не так. Мне нужны детали с высоким разрешением. То, что на самом деле использовать мое оборудование HPET было бы потрясающе.
бросать голову из-за малого количества ответов и просмотров.
6 ответов
Я сделал это двумя способами.
с "loadrunner", который является прекрасным, но довольно дорогим продуктом (от Я думаю, HP в эти дни).
с комбинацией perl / php и пакетом Curl. Я нашел curl api немного проще в использовании из php. Его довольно легко свернуть свои собственные запросы GET и PUT. Я бы также рекомендовал вручную выполнить некоторые примеры запросов с Firefox и LiveHttpHeaders добавить на captute точный формат http-запросов, которые вы необходимость.
JMeter очень удобно. Он имеет GUI, из которого вы можете настроить свои запросы и threadpools, а также его можно запустить из командной строки.
Если вы можете кодировать на Java, вы можете посмотреть комбинацию JUnitPerf + HttpUnit.
минус в том, что вам придется делать больше вещей самостоятельно. Но ценой этого вы получите неограниченную гибкость и, возможно, большую точность, чем с инструментами GUI, не говоря уже о синтаксическом анализе HTML, выполнении JavaScript и т. д.
есть еще один проект под названием мясорубки который, кажется, предназначен для аналогичной задачи, но у меня нет опыт работы с ним.
хорошая ссылка на инструменты тестирования производительности opensource:http://www.opensourcetesting.org/performance.php
вы найдете описания и "самый популярный" список
Я использовал скрипт для привода 10 ящиков на одном коммутаторе для генерации нагрузки путем "воспроизведения" запросов на 1 сервер. У меня было время ответа веб-приложения (только сервер) на требуемую степень детализации, но меня не заботило время ответа клиенту. Я не уверен, что вы хотите включить поездку к и от клиента в свои расчеты, но если вы это сделали, это не должно быть трудно кодировать. Затем я обработал свой журнал скриптом, который извлекал время на url-адрес и делал разброс графики и графики трендов, основанные на нагрузке.
это удовлетворяло моим требованиям, которые были:
- реальное распределение вызовов по различным URL-адресам.
- трендовая производительность на основе нагрузки.
- не влияет на веб-приложение, запустив другие интенсивные операции в том же окне.
Я сделал контроллер как сценарий оболочки, который сервер foreach запустил процесс в фоновом режиме, чтобы зациклить все URL-адреса в файле, вызывающем curl на каждом один. Я написал процессор журнала в Perl, так как в то время я делал больше Perl.