一个网站性能的问题,寻求帮助!_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 一个网站性能的问题,寻求帮助!

一个网站性能的问题,寻求帮助!

 2011/10/18 6:10:47  haouziwefe  http://haouziwefe.iteye.com  我要评论(0)
  • 摘要:网站是一个wap站点,负责将用户访问的web站点的页面转换成为wml页面展示给手机用户服务器主要使用apache2.2+resin3.1,四台服务器一台服务器用apache做入口,使用mod_caucho做负载均衡,另外三台服务器负责处理具体逻辑其中抓取网页部分用了apache的commons-httpclient,解析html用了nekohtml,缓存使用的是oscache(没有做集群),数据库(主要保存的是html->wml的转换规则数据,数据量很小)用的mysql5
  • 标签:一个 问题 网站 网站性能
    网站是一个wap站点,负责将用户访问的web站点的页面转换成为wml页面展示给手机用户
服务器主要使用apache2.2 + resin3.1,四台服务器
一台服务器用apache做入口,使用mod_caucho做负载均衡,另外三台服务器负责处理具体逻辑
其中抓取网页部分用了apache的commons-httpclient,解析html用了nekohtml,缓存使用的是oscache(没有做集群),数据库(主要保存的是html->wml的转换规则数据,数据量很小)用的mysql5。
逻辑的主要流程是这样:
1、用户在wap页面上点击或者输入一个web站点的网址,交给服务器处理
2、服务器首先判断请求的网页是否在本地缓存,如果是,直接输出给用户。
3、如果本地缓存不存在,则通过httpclient抓取远程的网页,并且解析并且根据一定规则处理成手机能够浏览的wml页面,展示给手机用户。
?
开始用户量很小的时候没出现什么问题,但随着每天pv的增加,性能的问题就越来越明显
目前每天的访问量大概每天只有100万的pv左右,但性能已经出现比较大的问题了。
?
现在的表现是抓取网页速度明显有所下降,从每次抓取一个页面需要几十到几百毫秒上升到了几秒钟,而且那两台resin服务器的cpu的占用率最高时候能够达到接近100%,有时则是resin停止响应,需要重启resin才能继续响应用户请求。
?
?
另外在cpu占用方面,有些数据我不是很明白:
这是top出来的数据:
cpu states:? cpu??? user??? nice? system??? irq? softirq? iowait??? idle<br/>?????????? total?? 45.4%??? 0.0%?? 52.1%?? 0.0%???? 0.2%??? 0.4%??? 1.5%<br/>?????????? cpu00?? 44.6%??? 0.0%?? 52.3%?? 0.1%???? 0.9%??? 0.6%??? 1.1%<br/>?????????? cpu01?? 42.2%??? 0.0%?? 55.4%?? 0.0%???? 0.0%??? 0.1%??? 2.1%<br/>?????????? cpu02?? 54.0%??? 0.0%?? 43.8%?? 0.0%???? 0.1%??? 0.3%??? 1.6%<br/>?????????? cpu03?? 40.9%??? 0.0%?? 56.9%?? 0.0%???? 0.0%??? 0.8%??? 1.3%
?
这里边的system指的是什么操作所占用的cpu呢?
?
?
数据库肯定不是瓶颈所在,因为全部做了缓存。
缓存本身也应该不会是瓶颈所在,因为用的是内存缓存+硬盘缓存
现在猜想的瓶颈可能会发生在解析html和抓取网页数据的部分。
?
?
通过自己的测试和分析,找出了问题可能导致性能问题的地方:
1、由于高峰期每秒接收用户请求并且数据不在缓存中的情况大概有5-10条,然而这10多条的数据抓取不可能在一秒钟之内完成(设置了抓取的超时时间是5秒钟),所以可能会导致前面的请求还没有处理完,后面的请求又过来了,对外的连接数就会一直增多,直到无法响应。但这种情况只应该发生在夜里10点到12点的高峰期。
2、经过jprofiler测试,发现占用cpu最高的操作是用nekohtml解析html,占用的全部cpu资源的70-80%,这个我分析可能是影响效率的主要原因,我测试了一下,处理news.163.com这样的页面居然要花费几秒钟的时间。由于在做转换的时候我需要逐一遍历html的节点,所以用了递归方式处理的节点数据,但我不知道这个是否会影响解析的性能。
3、不知道mod_caucho在负载均衡方面是否有问题,因为发现三台resin的服务器分配的请求不太平均,其中一台分配的用户请求比较多,另外两台少一些,这样用户请求多的那一台服务器压力就特别大,所以导致访问速度非常慢。想尝试一下apache的反向代理负载均衡的模块试一下,不知道会不会分配平均一些。
?
?
请各位帮忙看一下性能问题可能会出现在什么地方,有什么好的方式解决没有?多谢了!
?
?
 
发表评论
用户名: 匿名