ITPUB??ì3
ITPUB论坛 » Java企业开发 » 一个网站性能的问题,寻求帮助!


标题: 一个网站性能的问题,寻求帮助!
离线 handuner
初级会员



精华贴数 0
个人空间 0
技术积分 3054 (485)
社区积分 0 (1439979)
注册日期 2007-6-21
论坛徽章:21
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-7-3 18:52 
一个网站性能的问题,寻求帮助!

网站是一个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
           total   45.4%    0.0%   52.1%   0.0%     0.2%    0.4%    1.5%
           cpu00   44.6%    0.0%   52.3%   0.1%     0.9%    0.6%    1.1%
           cpu01   42.2%    0.0%   55.4%   0.0%     0.0%    0.1%    2.1%
           cpu02   54.0%    0.0%   43.8%   0.0%     0.1%    0.3%    1.6%
           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的反向代理负载均衡的模块试一下,不知道会不会分配平均一些。





请各位帮忙看一下性能问题可能会出现在什么地方,有什么好的方式解决没有?多谢了!


只看该作者    顶部
离线 cayman811
高级会员



精华贴数 3
个人空间 0
技术积分 8021 (154)
社区积分 6 (14277)
注册日期 2006-8-9
论坛徽章:5
开发板块每日发贴之星开发板块每日发贴之星ITPUB新首页上线纪念徽章   
      

发表于 2008-7-3 18:53 
看你还在用Linux Kernel 2.4吧,不妨升级到Kernel2.6看看。

system高是系统进程占用了CPU,也可能是线程切换导致的,再仔细观察观察vmstat


只看该作者    顶部
离线 lazycat001
高级会员



精华贴数 1
个人空间 0
技术积分 8291 (149)
社区积分 0 (1064177)
注册日期 2006-8-9
论坛徽章:6
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星ITPUB新首页上线纪念徽章 
      

发表于 2008-7-3 18:53 
服务器内核版本的确是2.4,准备升级一下了,另外今天我把OSCache的文件缓存去掉只用内存缓存,现在system已经降下来了,但性能还是跟不上,现在是高峰期,user所占的CPU达到了90%以上,系统空闲的CPU几乎没有



[root@TXYJ-SVR log]# top
22:31:50  up  1:33,  1 user,  load average: 48.48, 44.63, 41.89
394 processes: 392 sleeping, 2 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total   92.6%    0.0%    5.7%   0.0%     0.2%    0.0%    1.3%
           cpu00   92.4%    0.0%    6.3%   0.0%     0.4%    0.0%    0.8%
           cpu01   92.4%    0.0%    4.6%   0.0%     0.0%    0.0%    2.9%
           cpu02   94.1%    0.0%    4.6%   0.0%     0.4%    0.0%    0.8%
           cpu03   91.5%    0.0%    7.5%   0.0%     0.0%    0.0%    0.8%
Mem:  4101348k av, 2199024k used, 1902324k free,       0k shrd,  137112k buff
      1788664k active,               9840k inactive
Swap: 4192924k av,       0k used, 4192924k free                  146820k cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
9594 root      16   0 1283M 1.3G 63864 S     3.2 32.0   0:53   2 java
7549 root      16   0 1283M 1.3G 63864 S     2.3 32.0   1:32   1 java
6152 root      16   0 1283M 1.3G 63864 S     2.2 32.0   1:35   0 java
10387 root      16   0 1283M 1.3G 63864 S     2.2 32.0   0:52   0 java
6873 root      16   0 1283M 1.3G 63864 S     2.1 32.0   1:31   1 java
7810 root      16   0 1283M 1.3G 63864 S     2.1 32.0   1:32   2 java
9741 root      16   0 1283M 1.3G 63864 S     2.1 32.0   1:22   1 java
10466 root      16   0 1283M 1.3G 63864 S     2.1 32.0   1:15   2 java
1722 root      16   0 1283M 1.3G 63864 S     1.9 32.0   3:34   1 java
4657 root      16   0 1283M 1.3G 63864 S     1.9 32.0   2:16   1 java
9766 root      16   0 1283M 1.3G 63864 S     1.9 32.0   1:20   3 java
10622 root      16   0 1283M 1.3G 63864 S     1.9 32.0   1:23   3 java
5982 root      16   0 1283M 1.3G 63864 S     1.8 32.0   1:44   3 java
9250 root      16   0 1283M 1.3G 63864 S     1.8 32.0   1:04   1 java
10353 root      16   0 1283M 1.3G 63864 S     1.8 32.0   1:14   1 java
4711 root      16   0 1283M 1.3G 63864 S     1.7 32.0   2:13   3 java
10374 root      16   0 1283M 1.3G 63864 S     1.7 32.0   1:21   3 java
10575 root      16   0 1283M 1.3G 63864 S     1.7 32.0   1:23   1 java
6262 root      16   0 1283M 1.3G 63864 S     1.6 32.0   1:39   3 java
4791 root      15   0 1283M 1.3G 63864 S     1.4 32.0   1:59   3 java
6097 root      16   0 1283M 1.3G 63864 S     1.4 32.0   1:39   3 java
6746 root      16   0 1283M 1.3G 63864 S     1.4 32.0   1:29   1 java
8215 root      16   0 1283M 1.3G 63864 S     1.4 32.0   1:00   3 java
10463 root      16   0 1283M 1.3G 63864 S     1.4 32.0   1:22   0 java
4633 root      16   0 1283M 1.3G 63864 S     1.3 32.0   2:35   0 java
6242 root      16   0 1283M 1.3G 63864 S     1.3 32.0   1:40   1 java
7830 root      16   0 1283M 1.3G 63864 S     1.3 32.0   1:32   0 java
10053 root      16   0 1283M 1.3G 63864 S     1.3 32.0   1:17   1 java


__________________
我不是大虾
只看该作者    顶部
离线 duxiaochu1972
资深会员



精华贴数 0
个人空间 0
技术积分 6346 (201)
社区积分 4 (18222)
注册日期 2006-7-13
论坛徽章:14
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠

发表于 2008-7-3 18:53 
java->1.6

sun java -> bea jrockit

linux 2.4 -> 2.6

oscache -> memcached(解决java内存消耗,顺便解决2台机器的2份同样缓存的内存浪费问题)

把apache更换成lighttpd或者nginx,用proxy

3台resin拿出其中一台来做专门的获取url和分析操作

resin发现没有缓存中的,就发送命令到这台服务器上去,然后先告诉用户等待几秒钟重新刷新

这种结构就是至少保证缓存存在的访问者没有问题,然后下来的问题就是怎么改进抓取效率和页面处理效率的事情了


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问