我有一个在 apache/php4 服务器上运行的 PHP/Mysql 脚本(php4 只是临时的,直到新的服务器准备就绪...),我注意到一些奇怪的行为。
使用一些 php 和一些简单的 mysql 查询的请求通常非常快。但如果我向服务器发送相同的请求 10 次(一个接一个,没有任何重负载),也许 8-9 次它会在 50ms 内完成。但有一两个请求每次将花费超过 5 秒的时间。中间没有中间值,只有 ~50ms 或几秒钟。
它看起来非常随机(不是第一个请求很慢,然后接下来的请求很快或类似的情况)而且我找不到原因。
有谁知道什么可能导致这个问题以及如何解决它?
答案1
仅从简短的描述很难准确找出服务器运行缓慢的确切原因,您需要进行一些基准测试以找出导致服务器运行缓慢的原因。例如...
这可能是 apache 的配置(最大客户端数可以设置为真的数量较少 - 但这一点值得怀疑)。尝试Apache 基准测试 (ab)
可能是 MySQL 查询构造不当导致表锁定(取决于访问的每个表的存储引擎)或 MySQL 连接限制非常低(检查这)
可能是因为您的 PHP 脚本非常繁重,而您的服务器没有硬件来支持这种级别的活动。
编辑:看一下穆宁它将为您提供服务器性能的全面概述,然后在您发出请求时对其进行监控。
这一切都非常主观。也许其他人可以指出其他一些潜在问题。
答案2
正如其他人指出的那样,很难确定问题所在。但是,您可以检查脚本的执行情况。如果问题对 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,请将输出更改为写入文件。