墨鱼AWS 2011-09-03
声明:本文优化措施来源awstats官方网站和其他友人的博客(如有冒犯还请见谅,感谢你的互联网分享精神),优化过程为自己实际应用。
一、现状
网站每月大概有50万访问者(500,000visits/month),每天的nginx log 大小为62M(约30万条记录),使用awstats分析需要至少2小时,性能非常低,速度非常慢,与AWStats千万级日志解决方案的称号不匹配。
二、系统环境
Xeon(R)四核E5504 2.00GHz CPU
内存 3GB
PERL5.10 (最新版本5.14)
AWStats 6.7 (最新版本7.0)
AWStats官方性能基准:http://awstats.sourceforge.net/docs/awstats_benchmark.html
三、优化措施
1、关闭awstats配置文件中反向dns查找(DNSLookup=0)。
DNSlookup是用来根据参观者ip查询参观者的网域/国家信息。一般情况下DNS查询的很慢,具体取决于网络环境和系统配置。关闭DNSlookup会节省99%的分析时间。实际测试62M日志(30万条记录)如开启dnslookup分析时间在2小时以上,而关闭dnslookup的话分析时间在1分钟,极大缩短了分析时间。关掉dnslookup的损失就是无法获得参观者的国家信息,awstats官方建议如需要国家信息,采用更加精确的geoip插件来代替dnslookup。
2、关闭 URLWithQuery, URLReferrerWithQuery ,URLWithAnchor (如果你不知道它们有什么作用最好设置为0),awstats默认关闭这3个选项。
3、升级perl版本(perl 5.8要比perl 5.6快5%),用标准的perl发行版本代替ActiveState版本(因为ActiveState有内存泄露的问题,会导致分析会越来越慢以致最后一行也不能分析)。
4、日志循环(Rotate your log),把log分割成更小的部分,使用crontab适当提高分析频率,可以让awstats分析的更快些。
5、升级awstats版本(AWStats 6.0 要比awstats 5.9 快15%)。
6、确保awstats配置文件中HostAliases参数的完整性。
7、使用zcat直接读取.gz文件,过滤掉图片、js、css等文件
具体如下:
./awstats.pl -update -config=test -LogFile="/bin/zcat test.log.gz |grep -v '.gif/|.png/|.jpg/|.js/|.css' |"
8、通过修改awstats.pl文件来进行,其中 $LIMITFLUSH 默认值为5000,可以根据服务器自身内存进行增加,我增加到了100000,性能会有一定的提升。
# vi /usr/lib/cgi-bin/awstats.pl
38 $LIMITFLUSH=5000; # Nb of records in data arrays after how we need to flush data on disk
四、优化结果
优化前,分析30万条记录需要至少2个小时;关闭dnslookup后,分析30万条记录需要1分钟。
优化后的结果可以满足目前需求。其他优化措施再修改后效果不明显。
五、性能瓶颈
由于awstats有很多丰富的统计指标:蜘蛛识别 浏览器识别,文件类型统计等,漂亮的分析结果页面,是Webalizer、analog不能及的,这在一定程度上肯定会消耗更长的分析时间。
但对于一个访问量巨大的网站来说,用awstats分析是一件很痛苦的事情。awstats官方建议是当访问量超过 4,000,000visits/month时,推荐使用统计指标更少、速度更快的Analog或者Webalizer。