当前位置: 代码迷 >> Web前端 >> web性能优化(1)弱请求处理
  详细解决方案

web性能优化(1)弱请求处理

热度:246   发布时间:2012-07-22 19:31:17.0
web性能优化(一)弱请求处理

?????

[文章作者:狂奔的鹿 本文版本:v1.0? 转载请注明原文链接:http://dynamiclu.iteye.com/]

??

???? 从开发人员到系统工程师、运维工程师以及架构师,经常会收到用户或需求方的反映,说我们网站打开地很慢,甚至出现了502等。这个问题原因较多,处理方式也较多。我要分享的是一个弱请求处理的优化方式。

????? 弱请求在这里是指那些响应较慢、耗时较长的HTTP请求,是笔者临时命名的。有经验的工程师都知道,我们要分析系统性能问题时,只需分析这个系统的请求处理容量和单个请求的平均响应时间。有前辈分享的2/8原则,提到我们的系统有20%左右响应较慢的请求占用了超过20%以上的资源。这里要说的就是对这些请求响应时间的处理方式。

?

1.如何获取系统的单个请求响应时间?

???? 客户端层面的较复杂,不同的地区有差别,可以用httpwatch,压力测试软件,或部署在各国的各地的性能监控平台获取。
???? 服务器端的方式有:1.配置nginx,apache日志格式? 2.在工程代码里加filter,记录下来。建议用第一种方式。

??

修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
找到log_format,在最后添加request_time项,如下
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"'
'"$request_time"';
保存退出.

kill -HUP PID(nginx的PID)

?

?? 提醒:日志格式修改后,注意是否有相关的日志分析程序需要相应的修改

?

打开的nginx时志文件

tail -fn100 /usr/local/nginx/logs/access.log

?

??? 会发现在最后多了一项数据,如下图

????????

表示请求/msg/replyList/msg/1/1.html?? 响应时间为:0.053秒

?

太好了,服务器请求时间记录下来了。

apache也可以作类似设置,有兴趣的同学可以在baidu里google一下就知道了。

?

然后,让我们的系统跑动若干时间段。

?

我们再取出日志,执行:

cat access.log |awk  '($7~/\.html/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100

#意思是列出到客户端最耗时的前100个请求的html页面, (可修改,为jsp,php)分别显示响应时间  IP来源  请求发生的时间   请求页

?

如下图

?

?

?

???? 说明请求/msg/msgup.html较慢,超过了6秒,太消耗资源了。

?

???? 经常分析日志,我们会得到一系列的这样的请求页面。

?

??? ?找到了妨碍我们系统性能的打开较慢的并页面了,根据前辈的提到了2/8原则,我们需要对这些请求进得处理:

?

? 方法一:
????? 分析这个请求对应的程序,是不是有很多for循环,是不是直接读库,缓存策略是否还可以优化,等等。修改程序就OK

? 方法二:
???? 利用nginx的正则匹配转发,我们把这些弱请求统计转到其它服务器处理,分流的作用。

?

上述策略之后,我们会发现我们系统负载下来了,502更少了,页面打开更快了。

?

?

注:两分种可以当面说完的策略,写文章却花了近一个小时,希望给各位看官平时的工作带来帮助。

?

[文章作者:狂奔的鹿 本文版本:v1.0? 转载请注明原文链接:http://dynamiclu.iteye.com/]

1 楼 boting 2011-01-05  
谢谢分享,学习了先...
  相关解决方案