为什么服务启动后CPU下降缓慢??

07-05-31 sxfreesky
我做的项目是个CS结构的,用于异步接收处理消息,启动时会被附到web下,利用spring的监听来启动。整个服务启动完后,正常情况下CPU占用应该会很快降到低谷的,可是经过我们观察,这个CPU占用率的下降速度被极大放缓了,下降速度几乎呈线形的降低,从8.8%左右的启动高峰降到1%以下都要将近半个小时。现在由于这个问题的存在,项目中另一个CPU占用大户在运行的时候由于CPU占用始终得不到迅速的释放,而使整个CPU占用率在项目系统运行时不断上升.......

现在初步判断出使用的二级缓存会在系统不运行时也占用CPU,从而影响CPU占用的释放速度。但个人感觉这个影响应该不大吧,请大家帮帮忙啊,项目后天就要上线了....

banq
2007-06-06 15:00
既然使用了异步接收处理消息,就应该使用JMS或SPring异步机制来实现。

缓存不会耗费CPU,只会耗费内存,当缓存不断增长时,可能会耗费CPU,因为垃圾回收机制频繁启动。

关键问题还是内存泄漏,通过jprofiler等工具找出内存泄漏的地方,估计花费时间不会短,说明这个系统功能是做出来了,性能不行,只做好了一半。

没有经过性能测试的系统是不能上线的,Java系统就是这个特点,所以,使用Java架构之前就要考虑到这个问题,合适的架构性能才会好。

sxfreesky
2007-06-17 15:41
感谢benq大哥的回复,该系统的确采用的JMS,实现为法国的joram4.3.20,曾在自己的开发机上测试,windowsXP+联想本本,jprofile下绿线在正常启动后保持直平线,蓝线随消息处理数增长,但增长到接近绿线时会立刻降下来,即所谓到5%的剩余内存时会启动fullGC,且每次下降到的底线基本保持平缓,这样看来似乎不存在内存泄漏

但该系统的生产环境是在aix上,ibm的s71机,JDK也由开发机的sunJDK1.4.2换成了ibmJDK1.4.2-64,在与该生产环境类似的测试环境上(测试机为s85,其他一致),我观察该系统的进程发现内存耗用在随消息处理数而不断增长(增量奇怪的保持为4K或4K的倍数),而打开verbose:gc,停止消息处理后,未出现GC日志,也就是说未触发GC动作,这时的CPU占用下降缓慢,又未触发GC,之后还要解决与WEB结合的问题,头疼死我了

[该贴被sxfreesky于2007年06月17日 15:46修改过]

sxfreesky
2007-06-17 16:31
另外,为了确定是否内存的问题,我还设置了-Xms90m -Xmx90m开关来启动该系统,该系统初始化完成后大概有72m,随消息处理内存不断上升,结果内存达到近90m时,随新消息的处理毫无阻碍的上到了90m以上,之后还是在继续着(包括WEB,不包括WEB时效果一样,只是初始化后的内存占用为57m),我对aix系统并不了解,so郁闷...

[该贴被sxfreesky于2007年06月17日 16:34修改过]

[该贴被sxfreesky于2007年06月17日 16:35修改过]

猜你喜欢