网站流量统计与问题排查

常见流量问题

GZIP压缩未开启

短线宝没有开启GZIP,返回的原始数据很大,开启后减少了80%的数据大小

缓存利用率低

比如短线宝的首页,很多内容针对所有用户都是相同的,但是每个用户来访问,都把整个页面重新返回了,页面html有4000多行,大小150K,这会造成非常多的流量
这种情况,可以动静拆分,对静态数据做好缓存

返回冗余数据

还是短线宝,请求精品内参时,将文章列表和每篇文章的具体数据都返回了,而文章内容只有在用户点击后才会展示
不过这个问题,根本原因应该是请求加了随机数,没有命中缓存

短线宝项目解决方案

1.开启GZIP
2.开启后,发现现在流量最大的,是精品内参返回的JSON数据,JSON格式对于流量本身就有优化效果,这个仅靠GZIP已经效果不明显了,因此对数据进行拆分,按需加载,且减小自动刷新的数据返回
3.首页HTML请求在开启GZIP后,流量已大大减小,动静分离的优化效果不明显,因此暂不优化

排查命令

目前nginx日志的格式,基本都是:

1
2
3
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_time $cookie_userid "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

所以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