Cakephp - Контроллер:: invokeAction занимает много времени

Я работаю над cakephp 2.x. Я нашел в резюме трассировки транзакций New Relic, что есть некоторые API, которые занимают много времени (почти 20-30 секунд), из которых почти 90% времени тратится на метод Controller:: invokeAction.

Может кто-нибудь объяснить, почему так много времени тратится на метод invokeAction.

Ответ 1

Я согласен с @ndm в том, что метод Controller:: invokeAction() инкапсулирует все, что вызвано действием Controller. Ваш метод не занимал много времени для выполнения, но когда он отправляет полученные данные клиенту - время, необходимое для завершения разгрузки данных, регистрируется в этом методе. В языке New Relic это uninstrumented time.

Новое время Relic Transaction также включает это сетевое время, которое будет регистрироваться в методе Controller:: invokeAction(), потому что New Relic не смог найти какое-либо другое действие, чтобы обвинить в нечитаемом времени.

Согласно новой реликвийной документации -

наиболее частыми виновниками являются функции, которые отправляют большие блоки данных или больших файлов пользователям. Если пользователь находится на медленном соединении, отправка небольших файлов (например, небольших изображений) может занять много времени из-за простой задержки сети. Поскольку внутреннее расширение или расширение C функции инструментальные, агент PHP не может "обвинять" время, затраченное на это, и это появляется в транзакционном следе как неинструментированное время.

Подробнее об этом можно прочитать здесь https://docs.newrelic.com/docs/agents/php-agent/troubleshooting/uninstrumented-time-traces

Если вы все еще хотите выяснить, что произошло, или проследите неинструментированное время вашего метода; вы можете установить newrelic.transaction_tracer.detail в 0 в свой агент New Relic PHP. Это обеспечит максимальную видимость.

Подробнее о настройке новой инструментальной базы Relic PHP вы можете узнать здесь: https://docs.newrelic.com/docs/agents/php-agent/features/php-custom-instrumentation