【问题标题】:Tracking the source of slowdowns [closed]跟踪减速的根源[关闭]
【发布时间】:2016-11-07 19:28:50
【问题描述】:

我想知道是否有人可以就如何跟踪导致减速的函数给出一个高级答案。

我们有一个包含 6000 行代码的网站,有时速度会显着下降。

我想知道跟踪这些偶尔减速的来源的最佳方法是什么?我们应该在每个函数上附加一个时间执行跟踪器还是您会推荐其他的东西?

这是使用 PHP 5.2.9(无框架)的标准 LAMP 堆栈设置。

【问题讨论】:

  • 假设代码是......好吧,不傻,我倾向于怀疑数据库瓶颈。确保您使用的是 INNODB 数据库(MyISAM 是去年的 Sooo!)并确保 WHERE 子句中使用的列具有索引以加快搜索速度。附带说明一下,您可以使用 Xenu 之类的工具来抓取您的网站,它可能能够指出某些页面的服务时间比正常情况要长。 home.snafu.de/tilman/xenulink.html
  • 就个人而言,我使用Blackfire
  • 减速是否发生在测试环境中 - (它是可重现的)或仅在“实时”中发生
  • 我确定有办法手动中断它,然后显示调用堆栈。这让你可以使用random pausing

标签: php performance performance-testing


【解决方案1】:

正确跟踪脚本变慢的原因和位置的唯一方法是使用a profiler
其中有一些可用于 PHP。其中一些需要您在服务器上安装一个模块,一些使用纯 PHP 库,而另一些则是独立的。

我首选的分析器是Zend Studio,主要是因为我将它用作我的 IDE。它的优点是既可以独立使用,也可以与服务器端模块(或 Zend Server 包)结合使用。允许您在本地和生产系统上进行分析。

然而,最容易查找的内容之一是循环内的SELECT 查询。它们因导致速度变慢而臭名昭著,尤其是当您要查询的表中有数百条记录时。

另一种情况是,您有多个快速连续的 AJAX 调用,并且您正在使用默认的 PHP 会话处理程序(平面文件)。这会导致加载时间显着增加,因为 IO 操作是锁定的。这意味着它一次只能处理 一个 使用会话的请求,即使 AJAX 本质上是异步的。
解决这个问题的最好方法是使用/编写一个自定义会话处理程序,该处理程序利用数据库来存储会话。只要确保您没有达到数据库连接限制。

首先也是最重要的:让自己成为一个合适的分析器。 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多