如何找到使用最多 CPU 的 PHP 代码行
How to find the line of PHP code which is using most CPU
我目前正在使用 EC2,并且在测试(使用 locust.io)100 个并发用户时,我达到了 15 的 RPS。但是,我的 CPU 使用率接近 100%。
有谁知道如何追踪 PHP 7 个使用最多 CPU 代码的 line/lines,以便我优化它们?
我建议 xdebug
和 kcachegrind
分析代码的行为。
像这样配置 xdebug 以启用分析:
xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1
如果您将 XDEBUG_PROFILE
作为 POST 或 GET 参数传递,xdebug 将在配置的位置生成分析数据。
使用 kcachegrind 打开这些文件以深入研究。
注意:在分析时执行会花费时间,并且生成的文件可能会变得非常大——注意磁盘使用情况。
在大多数语言和应用程序类型中,有相当多的商业产品旨在明确解决这些问题(通常有不错的免费试用)。
New Relic 在网络软件方面非常擅长,能够生成燃烧图表显示哪些方法导致最多 CPU 循环。它还能够特别突出显示不良查询、API 调用和其他外部服务。
这是我在尝试诊断 PHP 或 Java 网络应用程序中的性能问题时使用的工具。
AWS 刚刚推出 'X-Ray',它被要求做类似的工作,但我还没有机会尝试。
我目前正在使用 EC2,并且在测试(使用 locust.io)100 个并发用户时,我达到了 15 的 RPS。但是,我的 CPU 使用率接近 100%。
有谁知道如何追踪 PHP 7 个使用最多 CPU 代码的 line/lines,以便我优化它们?
我建议 xdebug
和 kcachegrind
分析代码的行为。
像这样配置 xdebug 以启用分析:
xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1
如果您将 XDEBUG_PROFILE
作为 POST 或 GET 参数传递,xdebug 将在配置的位置生成分析数据。
使用 kcachegrind 打开这些文件以深入研究。
注意:在分析时执行会花费时间,并且生成的文件可能会变得非常大——注意磁盘使用情况。
在大多数语言和应用程序类型中,有相当多的商业产品旨在明确解决这些问题(通常有不错的免费试用)。
New Relic 在网络软件方面非常擅长,能够生成燃烧图表显示哪些方法导致最多 CPU 循环。它还能够特别突出显示不良查询、API 调用和其他外部服务。
这是我在尝试诊断 PHP 或 Java 网络应用程序中的性能问题时使用的工具。
AWS 刚刚推出 'X-Ray',它被要求做类似的工作,但我还没有机会尝试。