Как получить трек вызовов методов и время их выполнения?
Есть скрипт, использует API битрикса, но сделан в виде своего класса. Выполняется долго, и я хочу понять какие методы вызываются и сколько выполняются. Как это можно сделать? Когда-то делал подобное, но никак не могу ни вспомнить, ни найти как такое сделать.
Bitrix\Main\Diag\SqlTracker не помогает, все вызовы меньше 0,Е-5
debug_backtrace() - тоже
Роман Чубич, узкое место может быть и в методе, где вычислительная сложность O(n*n) и выше. Польза профайлеров именно в том, что они подробно это показывают. Когда встроенная в Битрикс аналитика показывает, что на вывод компонента ушло 2 секунды, из которых на запросы 0.5 секунды, я понимаю, что там наверняка есть проблема, но этой информации мало.
Это все как-то без дополнительного софта на сервер можно получить, уже делал, но вот вспомнить и найти как не могу. Это как ошибка когда выводится при включенном debug=true там идет последовательный стек вызовов и это как-то просто делается без всяких извращений, но голова у меня дырявая
tgarl, можно в админке в настройкаа=х модуля "монитор производительности" включить монитор, потом потыкать в публичке нужный функционал, а потом посмотреть собранное в "настройки - производительность". Но я не помню детально, что именно собирается
Если предположить, что при вызове каждого метода происходит измерение времени начала, времени окончания и запись в лог, то единственное, что можно по нему определить - это глубину метода в стеке.
Целесообразно добавить функцию с логированием в те методы, которые в чем-то подозреваете.
А еще лучше посмотреть логи sql.
с SQL все норм, по запросам там время адекватное, а вот какой-то из методов тупит и нужно вычислить какой, может он в цикл ушел который не нужен или еще что.
В таком случае Михаил Ливач говорит всё верно.
Тут похоже действительно нужно найти или создать способ измерить время функции.
Но мне непросто представить себе задачу, которая выполняется дольше, чем запрос.
Большинство вычислений я поручаю sql, поскольку это синтаксически проще.
В общем подобью итог, не смог я трек вызовов собрать, но по другой задаче потребовалось собрать все вызовы событий и вот тут решилась и текущая задача. У event:: кроме send есть еще и дебагер свой и вот там вылезло событие модуля который давно не используется, но не удален, события этого модуля затрагивают изменение элементов, заказов и корзины и делает запрос к стороннему сервису, который недоступен. После зачистки сайт работать в 2 раза быстрее стал ну и мой класс тоже перестал тупить.