Отслеживание процесса ruby ​​во время его работы - PullRequest
1 голос
/ 13 октября 2009

Я использую код ruby, который содержит значительное количество запросов http (web и api), а также довольно интенсивную обработку данных. Как и следовало ожидать, он довольно медленный, и я хочу выяснить, где находятся главные горлышки бутылок. Я не думаю, что мне нужен полноценный профилировщик (пока), но мне нужен какой-то способ отслеживания процесса во время его выполнения (без записи оператора put по всему файлу)

Я полагаю, что это было бы довольно распространенной вещью, которую хотелось бы иметь, какие-либо мысли о том, как это можно сделать, возможно, гем / плагин, который это делает?

Ответы [ 4 ]

3 голосов
/ 14 октября 2009

Вы можете попробовать Hijack , он дает вам сеанс irb для существующего процесса ruby. В то время как в контексте вы могли бы сравнить предполагаемые запросы что-то вроде:

require 'benchmark'
puts Benchmark.measure { the_slow_Http_Request }

* * * * * * * * * * * * * * * * * * * * * * * * * очень хорошо, но я сам не пробовал.

1 голос
/ 20 ноября 2009

Можете ли вы запустить его под отладчиком и приостановить его вручную, пока он работает медленно? Если вы сделаете это несколько раз, вы узнаете, какие самые большие узкие места.

Например, если он находится в процессе ожидания веб-запроса или запроса API, он будет на вершине стека. Затем посмотрите на строку кода на один уровень вниз по стеку, которая является вызовом функции. Запрос ввода / вывода выполняется , потому что этого вызова функции. Затем посмотрите на следующую строку - тоже самое.

То же самое верно, если не выполняет ввод / вывод, как если бы это были вычисления. Каждая строка кода в стеке вызовов несет полную ответственность за этот отрезок времени.

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

Вот более полное объяснение.

1 голос
/ 14 октября 2009

Оцените это!

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

Одним из главных преимуществ использования этого подхода для меня было выяснение, насколько велика разница в группировании вставок базы данных.

Фактически я оставил эталоны в нескольких программах просто для того, чтобы постоянно проверять, что производительность находится в допустимых пределах

0 голосов
/ 20 апреля 2018

https://rbspy.github.io довольно внушительный и простой в использовании. просто отправьте ему свой pid, и вы сможете получить профилирование и хороший график пламени.

...