分析全站应用的响应时间
因为流量镜像分析的功能还没有做好,目前要统计全站的应用的响应时间就比较麻烦。我直接把做代理的nginx的日志都拷贝出来,然后跑脚本。由于日志是压缩过的,本来直接perl里面可以使用cpan里的一个gunzip的模块,但是测试后发现性能实在烂的不行,连gunzip速度的1/4都不到。后来直接换成调用pigz多线程解压,虽然pigz在解压时不如在压缩时能体现出多线程优势,但是相对直接gunzip还是快了些,反正机器有的是CPU,主要是磁盘性能不行。[perl]#!/usr/bin/perluse warnings; use strict; use IO::Uncompress::Gunzip qw(gunzip $GunzipError); my %dtimes; my %dseconds; my $DEBUG=1; my @logs; my $PRE="/home/test/temp"; my $tempfile="$PRE/gunziptemp"; my @time=(1,2,3,4,5,6,7,8,9,10); opendir my $DIR,"$PRE" or die "open dirctory failed"; while(my $dir=readdir $DIR) {push @logs,$dir if $dir =~/log.gz/ ; }close $DIR; foreach my $log(@logs) {print STDERR "analysis $log\n" if ($DEBUG ==1 ); # open my $logfd,"<$PRE/$log" or die "open $log failed\n"; # open my $unziplog,">$tempfile" or die "open unzip file failed\n"; # gunzip $logfd => $unziplog or die "unzip $log failed\n"; `pigz -d -k -c $PRE/$log >$tempfile ` or "unzip $log failed\n"; print STDERR "unzip $log ok \n" if ($DEBUG ==1 ); # close $unziplog; open my $unziplog,"<$tempfile" or die "open2 unzip file failed\n"; print STDERR "start analysis log\n" if ($DEBUG ==1 ); while(my $line=<$unziplog>) {my @temp; my ($domain,$restime); if($line=~/xxxx.com/) {@temp=split(/\s+/,$line); $domain=$temp[7]; $restime=$temp[-1]; next if( $restime !~ /\d+/); next if( $domain !~ /xxxx.com/ ); $domain=~s/:\d+//; }if(defined $domain && defined $restime ){$dtimes{$domain}++; my @t=grep { $_ – $restime <0} @time; foreach my $k(@t){$dseconds{$domain}{$k}++; } } ...