我正在开发cakephp 2.x. 我在New Relic的事务跟踪摘要中发现,有一些API花了很多时间(差不多20-30秒)来执行,其中几乎90%的时间花在Controller :: invokeAction方法上.
有人可以解释为什么在invokeAction方法上花了这么多时间.
我同意@ndm的说法,即Controller :: invokeAction()方法封装了Controller动作触发的所有内容.您的方法没有花费太多时间来执行,但是当它将结果数据发送到客户端时 - 完成卸载数据所花费的时间会记录到此方法中.在New Relic的说法中,这是一个没有仪表的时间.
New Relic的交易时间也包括这个网络时间,它将登录到Controller :: invokeAction()方法,因为New Relic无法找到其他一些操作来指责未跟踪的时间.
根据新遗物文件 -
最常见的罪魁祸首是向用户发送大块数据或大文件的功能.如果用户连接速度较慢,则由于网络延迟较短,发送小文件(例如小图像)可能需要很长时间.由于没有检测内部或C扩展函数,因此PHP代理没有人"责怪"花费的时间,并且这在事务跟踪中显示为未经检测的时间.
你可以在这里阅读更多相关信息https://docs.newrelic.com/docs/agents/php-agent/troubleshooting/uninstrumented-time-traces
如果您仍想弄清楚发生了什么,或者追踪您方法的未经检测的时间; 您可以在New Relic的PHP代理中设置newrelic.transaction_tracer.detail
to 0
.这将确保最大可见度.
您可以在此处阅读有关设置New Relic的PHP自定义检测的更多信息:https://docs.newrelic.com/docs/agents/php-agent/features/php-custom-instrumentation