部署在服务器的程序运行一段时间后,java.exe占用CPU资源比较多,从何着手解决?是否与内存泄漏有关? 如题。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体是什么程序啊?如果是Swing的话确实有这种可能。因为Swing组件存在内存泄露的问题。 是nio的socket服务端程序,不是swing 如果你对自己的系统非常了解那么可以轻易的判断出问题所在,否则可以用 一些外围的软件帮助检测你的系统一些cpu使用情况,内存使用情况。 国外一个软件jprofiler等 是JAVAW.EXE占用CPU比较多吧?这个很正常啊,特别是WEB的网页第一次打开的时候,WEB服务器要对页面进行编译.如果是一直占用100%,那才是有问题. 与sun.nio.ch.WindowsSelectorImpl$SubSelector.poll()有关,该方法在程序运行一段时间后占用jvm资源的98%,谁有过类似经验?期盼高手指教 cpu资源占得多了和内存泄露不一定有关系吧,要是内存会越用越多才是内存泄露.. 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【wlql】截止到2008-06-25 14:31:27的历史汇总数据(不包括此帖):发帖数:12 发帖分:250 结贴数:12 结贴分:250 未结数:0 未结分:0 结贴率:100.00% 结分率:100.00% 敬礼! 我使用netbeans的profile检测项目,java.exe占用cpu的表象就是sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(),和垃圾回收、内存泄漏关系不大。google的E文说,和java的nio的bug有关。无奈,鄙人E文实在是,汗。。有mail list提到,还未找到解决办法 做GUI变成的时候确实有这种可能,还是自己代码的问题,前几天csdn有个人发贴问gui的问题,我运行了,发现一起动就停不了,只能结束结成,他是把main方法写在了被调用的类中,搞了个递归比如public class a{ public a(){}..............................前面都是swing构造及其事件处理public static void mian(String[] args){ new a();}}自己检查下吧 对Java来说不是很正常的事情嘛? sun.nio.ch.WindowsSelectorImpl$SubSelector.poll有解吗?顶一下 经过长时间的观察,在sqlserver占用50%以上资源达到一定时间长度的时候(其他程序在执行),就会出现java.exe一直冲到100%,而且系统资源被释放后,java.exe却一直牢牢抓住100%不放。由于这个程序是实时的传输程序,在众多客户端同时请求的情况下不排除资源不足的情况。程序本身平均占用的系统资源比较少,基本可以排除内存泄漏的缘故。 我认为,和内存泄露没有太大关系,应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。LZ可以对你的程序,做如下检查:在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,或者是,死循环,并且每个循环周期,没有进行sleep。如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。其次,如果程序使用了数据库,那么,查看的东西就比较多了。当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,如果select的那个table中,数据量很大,也会使java.exe的使用率升高。然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。 我认为,和内存泄露没有太大关系,应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。LZ可以对你的程序,做如下检查:在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,或者是,死循环,并且每个循环周期,没有进行sleep。如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。其次,如果程序使用了数据库,那么,查看的东西就比较多了。当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,如果select的那个table中,数据量很大,也会使java.exe的使用率升高。然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。 日了,网络条件不好,同样的恢复,发了两个。刚部署上去,还好,过一段时间,CPU使用率就高了。这种情况,应该是,你的程序负载加大了。着重查看一下,是否是应为,处理数据越来越多造成的。如果是,就想法解决。 结贴。附上解决办法:1、卸下数据库连接池,使用工具类连接数据库。这样做从很大程度上降低了占用cpu的发生概率。2、定期重启服务。 新手求救,好像陷入死循环样,但是不知道错在哪了 双缓冲问题 一道编程 再请教个关于类加载的问题!谢谢! 没有工作经验这样的java程序员好找工作吗?大家请多指教下 JAVA核心技术 急求 极菜问题 环境变量的设置 学swing懂MVC的朋友,我请教一个问题,谢谢 我要学习JAVA,不知怎么入手。请哥、姐把我领进门吧!不胜感激! rmi问题 【讨论】Java中的变量命名法~~java中你还会使用匈牙利命名法吗?
这个很正常啊,特别是WEB的网页第一次打开的时候,WEB服务器要对页面进行编译.
如果是一直占用100%,那才是有问题.
楼主【wlql】截止到2008-06-25 14:31:27的历史汇总数据(不包括此帖):
发帖数:12 发帖分:250
结贴数:12 结贴分:250
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
比如
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有过类似的帖子,讲得非常好。
应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,
当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。LZ可以对你的程序,做如下检查:在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,
或者是,死循环,并且每个循环周期,没有进行sleep。
如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。其次,如果程序使用了数据库,那么,查看的东西就比较多了。
当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,
如果select的那个table中,数据量很大,也会使java.exe的使用率升高。
然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。
最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。
1、卸下数据库连接池,使用工具类连接数据库。这样做从很大程度上降低了占用cpu的发生概率。
2、定期重启服务。