我有一个运行在apache / php4服务器上的PHP / Mysql脚本(php4只是暂时的,直到一个新的服务器准备就绪…),我注意到一些奇怪的行为。
请求,使用一些PHP和一些简单的MySQL查询,通常是相当快的。 但是如果我把相同的请求发送到服务器10次(一个接一个,根本没有重载)可能是8-9次,它将在50ms内完成。 但是其中一个或两个请求每个都需要5秒钟。 之间没有什么,只是〜50ms或几秒钟。
这似乎很随机(不是第一个请求缓慢,下面的速度或类似的东西),我找不到原因。
有没有人有一个想法可能会导致这个问题,以及如何解决它?
很难从简短的描述中找出执行速度较慢的服务器的确切原因,因此您需要做一些基准testing,以找出减慢的原因。 例如…
这可能是Apache的configuration(最大客户端可以设置为一个非常低的数字 – 但这是可疑的)。 尝试apache基准(ab)
这可能是MySQL查询造成表锁(这取决于您访问每个表的存储引擎)或MySQL连接限制非常低(检查这个 )
这可能是因为你的PHP脚本真的很激烈,而你的服务器只是没有硬件来支持这种活动。
编辑:看看在这个会给你一个全面的服务器性能概述,然后监视它,当你提出请求。
这一切都很主观。 也许别人可能会指出其他一些潜在的问题。
正如其他人指出的那样,可能很难指出问题。 但是,您可以对脚本的执行进行一些检查。 如果问题对于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,请将输出更改为写入文件。