如何挖掘Nginx日志中隐藏的金矿?
|
那些累计占用了更多响应时间的请求,通常也耗用了更多的CPU时间,是性能优化重点照顾的对象. 慢查询分析“服务号刚推送了文章,有用户反映点开很慢”,你刚端起桌子上的水杯,就听到产品经理的大嗓门从办公室角落呼啸而来.“用户用的什么网络”,你一边问着,一边打开服务号亲自尝试一下.是用户网络环境不好,还是后台系统有了访问压力?是这一个用户慢,还是很多用户都慢?你一边脑子里在翻腾,一边又打开命令行去查看日志. 与PC浏览器相比,微信服务号在网络环境、页面渲染上有较大的掣肘,在缓存策略上也不如APP自如,有时会遇到诡异的问题.如果手里恰好有Nginx日志,能做点什么呢? 考虑一下MySQL数据库,可以打开慢查询功能,定期查找并优化慢查询,与此类似,Nginx日志中的响应时间,不相当于自带慢查询功能嘛.利用这一特性,我们分步进行慢查询分析: 第一步:是不是用户的网络状况不好?根据既往的经验,如果只有少量的请求较慢,而前后其他IP的请求都较快,通常是用户手机或网络状况不佳引起的.最简单的方法,统计慢查询所占比例: less main.log | awk -v limit=2 '{min=substr($4,17);reqs[min]
++;if($11>limit){slowReqs[min]++}} END{for(m in slowReqs){printf("%s %s %s%s %sn",m,slowReqs[m]/reqs[m] * 100,"%",slowReqs[m],reqs [m])}}' | more ? ?
10/Apr/2016:12:51 0.367% 7 1905 ?
?10/Apr/2016:12:52 0.638% 12 1882 ? ?
10/Apr/2016:12:53 0.548% 14 2554
慢查询所占比例极低,再根据用户手机型号、访问时间、访问页面等信息看能否定位到指定的请求,结合前后不同用户的请求,就可以确定是否用户的网络状况不好了. 第二步:是不是应用系统的瓶颈?对比应用服务器的返回时间($upstream_response_time字段),与Nginx服务器的处理时间($request_time字段),先快速排查是否某一台服务器抽风. 我们遇到过类似问题,平均响应时间90ms,还算正常,但某台服务器明显变慢,平均响应时间达到了200ms,影响了部分用户的访问体验. less main.log | awk '{upServer=$13;upTime=$12;if(upServer == "-"){upServer="Nginx"};if(upTime == "-"){upTime=0};upTimes[upServer] +=upTime;count[upServer]++;totalCount++;} END{for(server in upTimes) {printf("%s %s%s %ss %sn",count[server],count[server]/totalCount * 100,upTimes[server]/count[server],server)}}' | sort -nr
不幸,市场部此次推广活动,访问压力增大,所有服务器都在变慢,更可能是应用系统的性能达到了瓶颈.如果此时带宽都没跑满,在硬件扩容之前,考虑优化重点API、缓存、静态化策略吧,达到一个基本的要求:“优化系统,让瓶颈落到带宽上”. 第三步:应用系统没有瓶颈,是带宽的问题?快速查看一下每秒的流量: less main.log | awk '{second=substr($4,20);bytes[second]+=$10;} END{for(s in bytes){printf("%sKB %sn",bytes[s]/1024,s)}}' | more` ? ?1949.95KB 10/Apr/2016:12:53:15 ? ?2819.1KB 10/Apr/2016:12:53:16 ? ?3463.64KB 10/Apr/2016:12:53:17 ? ?3419.21KB 10/Apr/2016:12:53:18 ? ?2851.37KB 10/Apr/2016:12:53:19
峰值带宽接近出口带宽最大值了,幸福的烦恼,利用前面介绍的不同URL的带宽统计,做定向优化,或者加带宽吧. 还能做哪些优化?(编辑:网站开发网_马鞍山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

