我正在开发cakephp 2.x.我在New Relic的事务跟踪摘要中发现,有一些API花了很多时间(差不多20-30秒)来执行,其中几乎90%的时间都花在了Controller :: invokeAction方法上
有人可以解释为什么在invokeAction方法上花了那么多时间。
答案 0 :(得分:7)
我同意@ndm的说法,即Controller :: invokeAction()方法封装了Controller动作触发的所有内容。您的方法没有花费太多时间来执行,但是当它将结果数据发送到客户端时 - 完成卸载数据所花费的时间会记录到此方法中。在New Relic的说法中,这是 unustrumented time 。
New Relic的交易时间也包括这个网络时间,它将被记录到Controller :: invokeAction()方法中,因为New Relic找不到一些其他操作来应对未跟踪的时间。< / p>
根据新遗物文件 -
最常见的罪魁祸首是发送大块数据的函数 数据或大文件给用户。如果用户连接速度较慢, 发送小文件(例如小图像)可能需要很长时间 由于简单的网络延迟。由于没有内部或C扩展 函数已经过检测,PHP代理没有人责备&#34;责备&#34;该 花费的时间,这在事务跟踪中显示为 未经教育的时间。
您可以在此处详细了解https://docs.newrelic.com/docs/agents/php-agent/troubleshooting/uninstrumented-time-traces
如果您仍想弄清楚发生了什么,或者追踪您方法的未经检测的时间;您可以在New Relic的PHP代理中将newrelic.transaction_tracer.detail
设置为0
。这将确保最大可见度。
您可以在此处详细了解如何设置New Relic的PHP自定义检测:https://docs.newrelic.com/docs/agents/php-agent/features/php-custom-instrumentation