- 浏览: 49412 次
最新评论
-
ljf_home:
想法很不错。
一个云计算的构想 -
lizhi:
Libcloud 可以实现类似功能
一个云计算的构想 -
highill:
浏览器的兼容性问题和性能问题 需要很长时间来解决,中间有很多 ...
强大的HTML5 -
9310974aa:
非常感谢楼主!~~~
J2ME手机编程心得(四) -
longphoenix:
yangyi 写道互联网将更有用了,但是将更不安全了
确实啊 ...
强大的HTML5
网站是一个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的反向代理负载均衡的模块试一下,不知道会不会分配平均一些。
请各位帮忙看一下性能问题可能会出现在什么地方,有什么好的方式解决没有?多谢了!
评论
我已经把OSCache完全替换成memcached了
然后ulimit -n 65535
效果很明显,现在系统还算比较稳定了运行,只是解析HTML部分还暂时没想到办法
另外,发现apache使用mod_caucho作为负载均衡的时候,分配很不均匀,第一台服务器总是压力很大,后边两台压力就小的多,如果采用proxy的方式会不会好一些?
<pre name='code' class='java'>protected static MemCachedClient mcc = new MemCachedClient();
...
..
private CacheTool()
{
//设置memcached
String[] servers ={"116.213.64.53:10240"};
Integer[] weights = { 3 };
SockIOPool pool = SockIOPool.getInstance();
pool.setServers( servers );
pool.setWeights( weights );
pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 20 );
pool.setMaxIdle( 1000 * 60 * 60 * 6 );
pool.setMaintSleep( 30 );
pool.setNagle( false );
pool.setSocketTO( 3000 );
pool.setSocketConnectTO( 0 );
pool.initialize();
}
public Object getCache(String key, int period) {
Object objValue = null;
if(!remote){
try {
objValue = cacheAdmin.getFromCache(key, period);
} catch (NeedsRefreshException nrex) {
cacheAdmin.cancelUpdate(key); objValue = null;
}
}else{
//使用memcached获取缓存内容
objValue = mcc.get( key );
// System.out.println(objValue);
}
return objValue;
}
...
....
public void putCache(String key, Serializable objValue) {
if(!remote){
try{
cacheAdmin.putInCache(key, objValue);
}catch(Exception e){
cacheAdmin.cancelUpdate(key);
}
}else{
//设置缓存,6小时后实效
mcc.set(key, objValue,new java.util.Date(1000*60*60*6));
}
}
</pre>
<p> </p>
显然转换的程序需要优化
sun java -> bea jrockit
linux 2.4 -> 2.6
oscache -> memcached(解决java内存消耗,顺便解决2台机器的2份同样缓存的内存浪费问题)
把apache更换成lighttpd或者nginx,用proxy
3台resin拿出其中一台来做专门的获取url和分析操作
resin发现没有缓存中的,就发送命令到这台服务器上去,然后先告诉用户等待几秒钟重新刷新
这种结构就是至少保证缓存存在的访问者没有问题,然后下来的问题就是怎么改进抓取效率和页面处理效率的事情了
<div class='quote_div'>看你还在用Linux Kernel 2.4吧,不妨升级到Kernel2.6看看。 <br/><br/>system高是系统进程占用了CPU,也可能是线程切换导致的,再仔细观察观察vmstat</div>
<p><br/></p>
<p> 服务器内核版本的确是2.4,准备升级一下了,另外今天我把OSCache的文件缓存去掉只用内存缓存,现在system已经降下来了,但性能还是跟不上,现在是高峰期,user所占的CPU达到了90%以上,系统空闲的CPU几乎没有</p>
<p> </p>
<p>[root@TXYJ-SVR log]# top<br/> 22:31:50 up 1:33, 1 user, load average: 48.48, 44.63, 41.89<br/>394 processes: 392 sleeping, 2 running, 0 zombie, 0 stopped<br/>CPU states: cpu user nice system irq softirq iowait idle<br/> total 92.6% 0.0% 5.7% 0.0% 0.2% 0.0% 1.3%<br/> cpu00 92.4% 0.0% 6.3% 0.0% 0.4% 0.0% 0.8%<br/> cpu01 92.4% 0.0% 4.6% 0.0% 0.0% 0.0% 2.9%<br/> cpu02 94.1% 0.0% 4.6% 0.0% 0.4% 0.0% 0.8%<br/> cpu03 91.5% 0.0% 7.5% 0.0% 0.0% 0.0% 0.8%<br/>Mem: 4101348k av, 2199024k used, 1902324k free, 0k shrd, 137112k buff<br/> 1788664k active, 9840k inactive<br/>Swap: 4192924k av, 0k used, 4192924k free 146820k cached</p>
<p> PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND<br/> 9594 root 16 0 1283M 1.3G 63864 S 3.2 32.0 0:53 2 java<br/> 7549 root 16 0 1283M 1.3G 63864 S 2.3 32.0 1:32 1 java<br/> 6152 root 16 0 1283M 1.3G 63864 S 2.2 32.0 1:35 0 java<br/>10387 root 16 0 1283M 1.3G 63864 S 2.2 32.0 0:52 0 java<br/> 6873 root 16 0 1283M 1.3G 63864 S 2.1 32.0 1:31 1 java<br/> 7810 root 16 0 1283M 1.3G 63864 S 2.1 32.0 1:32 2 java<br/> 9741 root 16 0 1283M 1.3G 63864 S 2.1 32.0 1:22 1 java<br/>10466 root 16 0 1283M 1.3G 63864 S 2.1 32.0 1:15 2 java<br/> 1722 root 16 0 1283M 1.3G 63864 S 1.9 32.0 3:34 1 java<br/> 4657 root 16 0 1283M 1.3G 63864 S 1.9 32.0 2:16 1 java<br/> 9766 root 16 0 1283M 1.3G 63864 S 1.9 32.0 1:20 3 java<br/>10622 root 16 0 1283M 1.3G 63864 S 1.9 32.0 1:23 3 java<br/> 5982 root 16 0 1283M 1.3G 63864 S 1.8 32.0 1:44 3 java<br/> 9250 root 16 0 1283M 1.3G 63864 S 1.8 32.0 1:04 1 java<br/>10353 root 16 0 1283M 1.3G 63864 S 1.8 32.0 1:14 1 java<br/> 4711 root 16 0 1283M 1.3G 63864 S 1.7 32.0 2:13 3 java<br/>10374 root 16 0 1283M 1.3G 63864 S 1.7 32.0 1:21 3 java<br/>10575 root 16 0 1283M 1.3G 63864 S 1.7 32.0 1:23 1 java<br/> 6262 root 16 0 1283M 1.3G 63864 S 1.6 32.0 1:39 3 java<br/> 4791 root 15 0 1283M 1.3G 63864 S 1.4 32.0 1:59 3 java<br/> 6097 root 16 0 1283M 1.3G 63864 S 1.4 32.0 1:39 3 java<br/> 6746 root 16 0 1283M 1.3G 63864 S 1.4 32.0 1:29 1 java<br/> 8215 root 16 0 1283M 1.3G 63864 S 1.4 32.0 1:00 3 java<br/>10463 root 16 0 1283M 1.3G 63864 S 1.4 32.0 1:22 0 java<br/> 4633 root 16 0 1283M 1.3G 63864 S 1.3 32.0 2:35 0 java<br/> 6242 root 16 0 1283M 1.3G 63864 S 1.3 32.0 1:40 1 java<br/> 7830 root 16 0 1283M 1.3G 63864 S 1.3 32.0 1:32 0 java<br/>10053 root 16 0 1283M 1.3G 63864 S 1.3 32.0 1:17 1 java</p>
system高是系统进程占用了CPU,也可能是线程切换导致的,再仔细观察观察vmstat
发表评论
-
强大的HTML5
2010-02-23 09:50 2261前些天看了一些HTML5方面的资料,感觉 ... -
网站安全不可忽视--一个收费网站的破解过程
2004-10-07 09:23 1169某日在网上偶然打开一个网站,是有PLMM与你视频聊天的,但是要 ... -
教你用VC6做QQ对对碰外挂程序
2005-02-26 14:45 1082前段时间跟以前的同事玩QQ游戏对对碰,结果输的 ... -
用VC实现发送和接受短信
2005-04-14 01:48 3160前些日子感觉得练习一下VC了,所以就有想,平时发短信那 ... -
J2ME手机编程心得(一)
2006-01-18 09:05 900自学J2ME也有一段时间了,总觉得应该把自己学习的心得与 ... -
J2ME手机编程心得(二)
2006-01-18 09:06 1112J2ME的环境配置好了,现在就开始写我们的第一个J2ME的 ... -
J2ME手机编程心得(四)
2006-01-18 09:07 1516上一个贪吃蛇的游 ... -
J2ME手机编程心得(三)
2006-01-18 09:07 1188上一次已经做完了第一个简单的J2ME程序,但是可能大家最 ... -
Weblogic9.0的破解方法
2006-01-18 09:09 1155weblogic9已经出来了,在官方网站可以下载到试用版 ... -
利用J2ME制作你自己的网络相册
2006-01-21 11:52 1033现在越来越多的手机都支持拍照功能,但是各种型号的手机 ... -
Spring的IOC在J2EE项目中的应用
2006-03-06 17:28 1154前些天大概学习了一下Spring的IOC,感觉还是很方便的 ... -
自做代码生成器(一)介绍
2006-08-03 18:43 1138对数据库的操作中间,不同的地方无非是各个字段的信息,比如 ... -
自做代码生成器(二)规则格式定义
2006-08-03 18:45 1583首先是数据表和java类之间的转换规则,数据库以orac ... -
自做代码生成器(三)动手写代码
2006-08-03 18:46 1240定义好规则和配置格式,就可以开始动手写代码了,首先,需 ... -
自做代码生成器(四)举例实践
2006-08-03 18:47 1329我们先定义一个数据表的xml文件,比如系统用户的表sys ... -
OpenLaszlo在Resin上的部署以及开发
2007-07-04 18:00 1136早就关注过OpenLaszlo这个 ... -
resin3.1处理utf-8格式的jsp时存在的问题
2008-11-05 16:48 6439以前一直使用resin-3.0.x作为服务器,最近想升 ... -
一个数据层的设计与实现,大伙帮忙看看是否可行,谢谢!
2007-04-20 20:17 4108这里我没有使用Hibernate,我一直都嫌Hiber ...
相关推荐
对于遇到的问题,书中也鼓励读者提供反馈,并通过PacktPub网站的客户支持寻求帮助。 综上所述,这本书的内容涵盖了性能工程的基本理念、软件架构、设计原则以及具体的编程实践,为.NET程序员提供了全面的知识体系和...
1. **用户界面**:在线帮助系统的前端部分通常包含一个用户友好的界面,允许用户提交问题、查看历史记录、搜索解决方案和接收回复。这个界面可能包含注册/登录功能,以便跟踪用户活动并提供个性化的支持。 2. **...
"企业如何在可持续发展与产品性能迭代之间寻求平衡"这一主题揭示了这一问题的核心,并通过GfK的研究数据为我们提供了深入的洞察。 首先,消费者对环境的关注正显著影响购买行为。越来越多的消费者将可持续性视为...
报告“GfK:企业如何在可持续发展与产品性能迭代之间寻求平衡”聚焦于科技行业中一个日益重要的议题,即在满足消费者对环保的关切与保持产品性能进步之间找到平衡。GfK,作为全球知名的市场研究机构,通过其全球战略...
### C++性能优化知识点解析 ...对于任何希望在C++领域内深化自己技术能力的开发者来说,这本书都是一个不可或缺的学习资源。通过对本书的学习,读者不仅可以提升自己的编程技能,还能在实际项目中实现更高的性能目标。
标题中的"win7_pb_帮助补丁(解决每次打开PB弹出帮助问题).rar"指出,这个压缩包文件是为Windows 7系统设计的一个补丁,主要目的是解决PowerBuilder(简称PB)应用程序在运行时频繁弹出帮助窗口的问题。PowerBuilder...
### QAPM:一款强大且细腻的APP性能专项解决方案 #### 概述 QAPM作为一项技术方案,旨在提供一套全面的APP性能优化及管理工具。...对于寻求提升移动应用性能的企业和个人开发者而言,QAPM无疑是一个值得信赖的选择。
6. **问题解决**:如果在使用过程中遇到任何问题,如界面错乱、功能失效等,首先检查是否按照正确的步骤安装,其次查看汉化包是否完整,最后可以寻求社区支持或者联系汉化包的开发者寻求帮助。 7. **持续更新**:...
然而,随着系统的复杂性增加,如何有效监测和管理混合云的性能成为了一个挑战。本文将详细介绍如何利用Dynatrace软件,为Microsoft Azure提供端到端的混合云性能监测解决方案,使企业能够快速开始全面监控云环境。 ...
在IT行业中,优化网站性能是至关重要的,尤其是对于PHP开发者来说。本文将深入探讨一种被赞誉为“php网站性能分析利器工具”的应用,它甚至...对于那些寻求提高PHP网站性能的开发者而言,这是一个不容忽视的强大组合。
**React-BaseTable组件详解** React-BaseTable是一款专为React开发者设计的高性能、高度可定制的表格组件,尤其适用...对于那些寻求提升表格组件性能和用户体验的开发者来说,BaseTable无疑是一个值得考虑的解决方案。
由于三维渲染对计算资源的需求较大,性能问题常见,因此提出了一个系统性的提问单用于自助化解决性能瓶颈。以下是针对标题和描述中提到的知识点进行详细说明。 1. SuperMap三维项目性能问题的自我诊断与优化方法。...
### SQL Server 2005 与 SQL Server 2000 的性能比较 #### 一、概述 随着技术的进步,Microsoft 对其旗舰级数据库管理...对于那些正在寻求提高数据库性能的企业来说,迁移到 SQL Server 2005 是一个值得考虑的选择。
Vue.js是一个轻量级且易于学习的框架,它的性能得益于其类似的虚拟DOM机制和简单的API。Vue还支持单文件组件,使代码组织更加清晰。VuePress则是在Vue基础上构建的静态站点生成器,用于编写文档,它结合了Vue的动态...
- **"本文档为IIS性能计数器错误时的操作步骤,内容简洁明了"**:这表明文档的主要内容是提供一系列简单易懂的步骤来帮助用户解决IIS性能计数器出现错误的问题。 #### 标签解析 - **"计数器"**:进一步强调文档的...
据统计,一个站点可能包含从1种到115种不等的字体资源,平均为4种。然而,大多数站点并未对这些字体资源进行有效的压缩处理。 **现状分析** - **压缩比例低**: 只有9.6%的站点字体资源经过了压缩处理,而对于第三方...
这款工具的显著特点是它能够模拟大量真实的用户行为,对整个企业系统进行全面的性能测试,从而帮助测试人员快速定位并解决问题。 在LoadRunner的工作机制中,它首先通过创建虚拟用户来模拟实际用户的行为。这些虚拟...
1. **网站测试文档.doc**:这可能是一个详细的测试报告,包含了对管理系统功能、性能、兼容性等方面的测试步骤和结果,有助于理解系统的实际运行情况和可能存在的问题。 2. **网站帮助文档**:这份文档可能提供了...
综上所述,TProfiler 是一个强大的JAVA性能分析工具,无论是对于初学者还是经验丰富的开发者,都能在性能优化的道路上提供有力的支持。通过熟练掌握并运用TProfiler,我们可以更好地理解代码执行过程,提升应用的...
正式版源码"是一个专为Discuz!论坛系统设计的插件,用于整合Xweibo社交媒体平台的功能。这个插件的源码以PHP语言编写,使得Discuz!用户能够方便地在论坛内嵌入Xweibo的相关功能,增强社区的互动性和社交体验。 ...