追踪减速的根源

Tracking the source of slowdowns

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

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

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

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

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

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

但是,最容易查找的内容之一是 SELECT 循环内的查询。它们因导致速度下降而臭名昭著,尤其是当您在 table 中有超过几百条记录被查询时。

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

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