如题。谢谢

解决方案 »

  1.   

    具体是什么程序啊?如果是Swing的话确实有这种可能。因为Swing组件存在内存泄露的问题。
      

  2.   

    是nio的socket服务端程序,不是swing
      

  3.   

    如果你对自己的系统非常了解那么可以轻易的判断出问题所在,否则可以用 一些外围的软件帮助检测你的系统一些cpu使用情况,内存使用情况。 国外一个软件jprofiler等
      

  4.   

    是JAVAW.EXE占用CPU比较多吧?
    这个很正常啊,特别是WEB的网页第一次打开的时候,WEB服务器要对页面进行编译.
    如果是一直占用100%,那才是有问题.
      

  5.   

    与sun.nio.ch.WindowsSelectorImpl$SubSelector.poll()有关,该方法在程序运行一段时间后占用jvm资源的98%,谁有过类似经验?期盼高手指教
      

  6.   

    cpu资源占得多了和内存泄露不一定有关系吧,要是内存会越用越多才是内存泄露..
      

  7.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【wlql】截止到2008-06-25 14:31:27的历史汇总数据(不包括此帖):
    发帖数:12                 发帖分:250                
    结贴数:12                 结贴分:250                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  8.   

    我使用netbeans的profile检测项目,java.exe占用cpu的表象就是sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(),和垃圾回收、内存泄漏关系不大。google的E文说,和java的nio的bug有关。无奈,鄙人E文实在是,汗。。有mail list提到,还未找到解决办法
      

  9.   

    做GUI变成的时候确实有这种可能,还是自己代码的问题,前几天csdn有个人发贴问gui的问题,我运行了,发现一起动就停不了,只能结束结成,他是把main方法写在了被调用的类中,搞了个递归
    比如
    public class a{
     public a(){}
    ..........
    ..........
    ..........前面都是swing构造及其事件处理public static void mian(String[] args){
      new a();
    }
    }自己检查下吧
      

  10.   

    对Java来说不是很正常的事情嘛?
      

  11.   

    sun.nio.ch.WindowsSelectorImpl$SubSelector.poll有解吗?顶一下
      

  12.   

    经过长时间的观察,在sqlserver占用50%以上资源达到一定时间长度的时候(其他程序在执行),就会出现java.exe一直冲到100%,而且系统资源被释放后,java.exe却一直牢牢抓住100%不放。由于这个程序是实时的传输程序,在众多客户端同时请求的情况下不排除资源不足的情况。程序本身平均占用的系统资源比较少,基本可以排除内存泄漏的缘故。
      

  13.   

    我认为,和内存泄露没有太大关系,
    应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,
    当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。LZ可以对你的程序,做如下检查:在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,
    或者是,死循环,并且每个循环周期,没有进行sleep。
    如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。其次,如果程序使用了数据库,那么,查看的东西就比较多了。
    当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,
    如果select的那个table中,数据量很大,也会使java.exe的使用率升高。
    然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。
    最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。
      

  14.   

    我认为,和内存泄露没有太大关系,
    应该是你的程序里面,存在死循环,或者,循环调用大数据量的查找操作,造成的,
    当然,频繁的做逻辑运算和算数运算也会使CPU使用率增加,但是,这种情况比较少。LZ可以对你的程序,做如下检查:在线程的调用中,是否存在那种循环次数不确定,或者,循环次数超过万次且这种循环经常运行,的情况,
    或者是,死循环,并且每个循环周期,没有进行sleep。
    如果存在上述情况,可以根据实际需求,在相应的循环体的特定位置,添加sleep方法,使得其他线程可以有机会得到CPU的使用。其次,如果程序使用了数据库,那么,查看的东西就比较多了。
    当然,先要看,是否存在循环调用SQL进行操作的情况,尤其是select操作,
    如果select的那个table中,数据量很大,也会使java.exe的使用率升高。
    然后看看,经常访问的那些表,尽量使得那些表的表长度缩短,把不常用的数据迁移出去。
    最后,还有很多东西需要进行优化,记得以前CSDN有过类似的帖子,讲得非常好。
      

  15.   

    日了,网络条件不好,同样的恢复,发了两个。刚部署上去,还好,过一段时间,CPU使用率就高了。这种情况,应该是,你的程序负载加大了。着重查看一下,是否是应为,处理数据越来越多造成的。如果是,就想法解决。
      

  16.   

    结贴。附上解决办法:
    1、卸下数据库连接池,使用工具类连接数据库。这样做从很大程度上降低了占用cpu的发生概率。
    2、定期重启服务。