您的位置:首页 > 其它

slowlog分析工具 v 1.0

2015-08-05 16:02 295 查看
<?php

/**
*  slowlog分析工具 v 1.0
*
*/
if( $argc < 2 ){

$help.= "Help:" .PHP_EOL;
$help.= "        slowlog.php [option]" .PHP_EOL;
$help.= "        -f  log file path.".PHP_EOL;
$help.= "e.g : php slowlog.php -f slow.log".PHP_EOL;

exit($help);
}

$file = $argv[2];

$logs = loadFile( $file );

$stats = array();

echo "Slow log:" . PHP_EOL;
foreach($logs as $key => $logsArr){

echo "---------------------------{$key}-------------------------------" .PHP_EOL;

foreach($logsArr as $k => $v){
echo $k . "     [num : ".count($v)."]" .PHP_EOL;
foreach ($v as $phpfile){

$n = explode(":",$phpfile);

$s = explode(" ",$n[0]);

if($s[2] && $s[2] != 'unknown' && $s[2] != 'dump'){
// echo "======> " . $s[2] . "[ Line: {$n[1]}]". PHP_EOL;

$md5_key = md5($s[2].$n[1]);

if(array_key_exists($md5_key,$stats[$key])){

$stats[$key][$md5_key] = array(
'main'=>$k,
'file'=> $s[2],
'line'=> $n[1],
'code'=> $s[1],
'num'=> $stats[$key][$md5_key]['num'] + 1
);
} else {

$stats[$key][$md5_key] = array(
'main'=>$k,
'file'=> $s[2],
'line'=> $n[1],
'code'=> $s[1],
'num'=>1
);

}

}
}
}

}

echo PHP_EOL;
echo PHP_EOL;
echo PHP_EOL;
echo "Create json file: slowlog.json" . PHP_EOL;
file_put_contents('slowlog.json',json_encode($stats));
echo "Success!" . PHP_EOL;
echo "http://tool.lu/json/";

function loadFile( $file ){

$str = file_get_contents($file);

$arr = explode("\n",$str);
$g = 0;
$data = array();
foreach($arr as $val){
if( $val ){
$data[ $g - 1][] = $val;
} else {

$g++;
}
}

$logs = array();
foreach( $data as $key => $log){
foreach($log as $k => $l){

$time = $data[$key][0];
$phpfile = $data[$key][1];
$p = "#\[(.*?) (.*?)\]  \[(.*?)\] pid (.*?)#";
preg_match($p,$data[$key][0],$arr);
$time = $arr[1];

if( $data[$key][0] != $l ){

if( $phpfile != $l ){
$logs[ $time ][$phpfile][] = $l;
}
}
}
}

return $logs;
}


切记: 在使用此工具的时候,请先把slowlog功能关闭,不然会造成502错误(文件读写冲突)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: