PHP请求有时非常慢

我有一个运行在apache / php4服务器上的PHP / Mysql脚本(php4只是暂时的,直到一个新的服务器准备就绪…),我注意到一些奇怪的行为。

请求,使用一些PHP和一些简单的MySQL查询,通常是相当快的。 但是如果我把相同的请求发送到服务器10次(一个接一个,根本没有重载)可能是8-9次,它将在50ms内完成。 但是其中一个或两个请求每个都需要5秒钟。 之间没有什么,只是〜50ms或几秒钟。

这似乎很随机(不是第一个请求缓慢,下面的速度或类似的东西),我找不到原因。

有没有人有一个想法可能会导致这个问题,以及如何解决它?

很难从简短的描述中找出执行速度较慢的服务器的确切原因,因此您需要做一些基准testing,以找出减慢的原因。 例如…

  1. 这可能是Apache的configuration(最大客户端可以设置为一个非常低的数字 – 但这是可疑的)。 尝试apache基准(ab)

  2. 这可能是MySQL查询造成表锁(这取决于您访问每个表的存储引擎)或MySQL连接限制非常低(检查这个 )

  3. 这可能是因为你的PHP脚本真的很激烈,而你的服务器只是没有硬件来支持这种活动。

  4. 编辑:看看在这个会给你一个全面的服务器性能概述,然后监视它,当你提出请求。

这一切都很主观。 也许别人可能会指出其他一些潜在的问题。

正如其他人指出的那样,可能很难指出问题。 但是,您可以对脚本的执行进行一些检查。 如果问题对于PHP来说是可见的,那很可能是在PHP或数据库之间。

你可以在脚本中做一些执行检查:

function checkpoint(){ $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; return $mtime; } function measureGaps($data){ $size = count($data); for($i=0; $i < $size - 1; $i++){ $p = $i+1; $gap[]= $data[$p] - $data[$i]; } return $gap; } 

在每个检查点,你可以做:

 $checkpointArray[] = checkpoint(); 

在脚本的末尾,调用另一个函数:

 var_dump(measureGaps($checkpointArray)); 

如果您不想执行var_dump,请将输出更改为写入文件。