2008年11月14日星期五

AWSTATS性能优化

awstats是一款日志分析统计程序, 深受广大群众的喜爱。 其拥有较好性能以及丰富的分析结果。但是对于一些大访问量的网站而言,其统计速度仍然远远显得不够。

之前看过awstats官方的优化建议 awstats benchmark(中文翻译在这里), 除了DNSLookup此参数影响较大外,其他的一些参数优化并不能带来非常明显的性能提升,当然这些也是有必要去做的。

awstats官方给出的建议是当访问量超过 4,000,000/月时,推荐你使用Analog或者Webalizer ,这两款统计程序确实快!但是我们有不得不用awstats的理由。对于某些大的门户网站和公司来说,必然会自己开发一套统计系统进行实时统计,这种做法的好处这里就不多说了,但如果仅仅为了得知每天的IP、UV、PV及页面访问情况等,自己开发的成本无疑是一笔不小的开销。但对于日访问量上千万的站点来说,awstats的龟速实在让人无法忍受。

我们网站的日PV至发帖日为止是4000万左右,至今仍在以50-60%/月的速度在增加,日志解压缩后的大小将近200G, awstats每天自动对日志进行分析,整个统计时间大概是16-17小时之间。服务器配置:Xeon双核 1.6 * 2 ,4G内存 , 147G硬盘。

147G的硬盘当然无法解开100多G的日志文件外加一周内的日志,还不算系统自身所占用的磁盘空间。
所以这里我们用到了zcat , 在chedong的AWStats的千万级日志解决方案这篇文章中曾经提到过。zcat确实是一个好东西,可以不用解压缩对gzip、bz2等压缩文件进行输出,而根本不影响统计速度,甚至有所提高,因为perl在执行大文件操作时性能会受到影响。

要知道,加载一个页面同时也加载了许多图片、js、css等文件,我们假设这些访问记录都是在一个日志文件中,那么图片的记录就占了所有访问记录的80%以上。
那么,我们只需要过滤掉这些信息,统计时间也会降至原有时间的20% !
具体如下:
./awstats.pl -update -config=test -LogFile=”/bin/zcat test.log.gz |grep -v ‘.gif\|.png\|.jpg\|.js\|.css’ |”
这是使用了单独域名的前提下,再就是我们可以将组件单独拿到另外的域名来加载,这样达到了过滤的效果。(使用单独域名在大多数情况下不利于网站前端性能,这里不做讨论,详细请参考此文第八条)

第二步,可以通过修改awstats.pl文件来进行,其中 $LIMITFLUSH 默认值为5000,可以根据服务器自身内存进行增加,我增加到了100000,性能提高很明显。

如果你需要统计多个域名的日志,多核、多CPU的服务器则可以开启多个进程同时在后台进行分析,在shell中加上wait就可等待所有进程执行完后再进行之后的html生成。

没有评论:

发表评论

网站统计