网站流量统计与问题排查
常见流量问题
GZIP压缩未开启
短线宝没有开启GZIP,返回的原始数据很大,开启后减少了80%的数据大小
缓存利用率低
比如短线宝的首页,很多内容针对所有用户都是相同的,但是每个用户来访问,都把整个页面重新返回了,页面html有4000多行,大小150K,这会造成非常多的流量
这种情况,可以动静拆分,对静态数据做好缓存
返回冗余数据
还是短线宝,请求精品内参时,将文章列表和每篇文章的具体数据都返回了,而文章内容只有在用户点击后才会展示
不过这个问题,根本原因应该是请求加了随机数,没有命中缓存
短线宝项目解决方案
1.开启GZIP
2.开启后,发现现在流量最大的,是精品内参返回的JSON数据,JSON格式对于流量本身就有优化效果,这个仅靠GZIP已经效果不明显了,因此对数据进行拆分,按需加载,且减小自动刷新的数据返回
3.首页HTML请求在开启GZIP后,流量已大大减小,动静分离的优化效果不明显,因此暂不优化
排查命令
目前nginx日志的格式,基本都是:
1 | |
所以awk解析时,$4-日期 $7-uri $10-响应数据大小 $11-响应时间 $(NF-2)-IP
查看耗时较久的请求
cat /usr/local/nginx/logs/cso.access.log|awk ‘($4>”[18/Mar/2015:00:00:00” && $11>1){print $4”–”$11”–”$7}’
统计某一天的流量大小
cat /usr/local/nginx/logs/yjs.access.log|awk ‘($4>”[16/Mar/2015:00:00:00” && $4<”[17/Mar/2015:00:00:00”){c+=$10}END{print c}’
查看某天响应数据最大的100个请求
cat /usr/local/nginx/logs/poi.access.log|awk ‘($4>”[16/Mar/2015:00:00:00” && $4<”[17/Mar/2015:00:00:00”){print $10”\t\t”$7}’|sort -n -k 1 -r|head -n 100
搜集访问某个uri的IP
cat /usr/local/nginx/logs/yjs.access.log|awk ‘($7~//dxb/index/index/ && $4>”[16/Mar/2015:00:00:00” && $4<”[17/Mar/2015:00:00:00”){print $(NF-1)}’ > ip.log
统计访问最多的100个IP及访问次数
awk ‘{print $1}’ /usr/local/nginx/logs/yjs.access.log| sort | uniq -c | sort -n -k 1 -r | head -n 100