日期:2014-05-20  浏览次数:20702 次

部署在服务器的程序运行一段时间后,java.exe占用CPU资源比较多,从何着手解决?是否与内存泄漏有关?
如题。谢谢

------解决方案--------------------
具体是什么程序啊?如果是Swing的话确实有这种可能。因为Swing组件存在内存泄露的问题。
------解决方案--------------------
是不是服务器开线程太多了,或是不用的线程没有及时释放连接?
------解决方案--------------------
如果你对自己的系统非常了解那么可以轻易的判断出问题所在,否则可以用 一些外围的软件帮助检测你的系统一些cpu使用情况,内存使用情况。 国外一个软件jprofiler等

------解决方案--------------------
看看你运行的程序是不是写得科学咯/
主要是关于对象释放的方面,有很多程序员写程序很少注意这一点。。。。
------解决方案--------------------
这种问题的确很头疼啊。
看看打开的资源有没有及时关闭吧。比如数据库链接,文件什么的。
------解决方案--------------------
cpu资源占得多了和内存泄露不一定有关系吧,要是内存会越用越多才是内存泄露..
------解决方案--------------------
此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【wlql】截止到2008-06-25 14:31:27的历史汇总数据(不包括此帖):
发帖数:12 发帖分:250
结贴数:12 结贴分:250
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
------解决方案--------------------
没弄过 帮顶了 如果你认为是内存泄漏的问题
你可以用jprofiler检测一下
------解决方案--------------------
lz加油吧.顶
------解决方案--------------------
探讨
是不是服务器开线程太多了,或是不用的线程没有及时释放连接?

------解决方案--------------------
做GUI变成的时候确实有这种可能,还是自己代码的问题,前几天csdn有个人发贴问gui的问题,我运行了,发现一起动就停不了,只能结束结成,他是把main方法写在了被调用的类中,搞了个递归
比如
public class a{
 public a(){}
..........
..........
..........

前面都是swing构造及其事件处理

public static void mian(String[] args){
new a();
}
}

自己检查下吧
------解决方案--------------------
顶一下
------解决方案--------------------
我认为,和内存泄露没有太大关系,
应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,
当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。

LZ可以对你的程序,做如下检查:

在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,
或者是,死循环,并且每个循环周期,没有进行sleep。
如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。

其次,如果程序使用了数据库,那么,查看的东西就比较多了。
当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,
如果select的那个table中,数据量很大,也会使java.exe的使用率升高。
然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。
最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。