论坛首页 Java企业应用论坛

生产环境jvm内存运行1小时,就接近xmx,系统奇慢。

浏览 19094 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-17  
如果配置4g的内存就是不断在gc,32g的内存则就是上,上到32g就废了,32g回收要命呀。我就想看是哪个类加载的这么多?
0 请登录后投票
   发表时间:2011-10-17  
有地方内存溢出了,多测试。
0 请登录后投票
   发表时间:2011-10-17  
neptune 写道
如果配置4g的内存就是不断在gc,32g的内存则就是上,上到32g就废了,32g回收要命呀。我就想看是哪个类加载的这么多?



类加载之后都放在permGen中,这个区的大小基本很稳定,你要是配内存到32G,一次FULL GC就能停顿好久

没服务,这种问题看日志就可以看出来,有时间不如学习下JVM方面的知识
0 请登录后投票
   发表时间:2011-10-17  
程序新手 写道
neptune 写道
如果配置4g的内存就是不断在gc,32g的内存则就是上,上到32g就废了,32g回收要命呀。我就想看是哪个类加载的这么多?



类加载之后都放在permGen中,这个区的大小基本很稳定,你要是配内存到32G,一次FULL GC就能停顿好久

没服务,这种问题看日志就可以看出来,有时间不如学习下JVM方面的知识


谢指点,但希望具体点,因为现在急着解决问题。
0 请登录后投票
   发表时间:2011-10-17  
neptune 写道
程序新手 写道
neptune 写道
如果配置4g的内存就是不断在gc,32g的内存则就是上,上到32g就废了,32g回收要命呀。我就想看是哪个类加载的这么多?



类加载之后都放在permGen中,这个区的大小基本很稳定,你要是配内存到32G,一次FULL GC就能停顿好久

没服务,这种问题看日志就可以看出来,有时间不如学习下JVM方面的知识


谢指点,但希望具体点,因为现在急着解决问题。



   你现在只是说现象...你遇到的问题你最清楚,不和别人说清楚,怎么“具体”
0 请登录后投票
   发表时间:2011-10-17  
呵呵,从你“运行2个小时后32g全部使用了” 这句话来看,内存增长的很厉害!

那么你的程序一定有大量对象的创建,然后又没有及时释放的地方,这个我觉得应该

很容易在代码上分析出来吧(如果你对程序实现很清楚的话),我觉得都不需要借助与什么工

具来分析!

0 请登录后投票
   发表时间:2011-10-17  
看看第三方jar包吧...我以前有过一次..用了国内著名的某分词内存一直张呀涨呀的...最后..不行了...还有..java虚拟机带内存调试工具了..在win下叫 jvisualvm  就是在jdk的bin目录下..你可以试试....
0 请登录后投票
   发表时间:2011-10-17  
hubenhua1998 写道
呵呵,从你“运行2个小时后32g全部使用了” 这句话来看,内存增长的很厉害!

那么你的程序一定有大量对象的创建,然后又没有及时释放的地方,这个我觉得应该

很容易在代码上分析出来吧(如果你对程序实现很清楚的话),我觉得都不需要借助与什么工

具来分析!



    确实..这种内存增长很明显的问题比较好定位

    导致内存增长过快理论上有几种可能
 
     1) 对象太大,直接进入养老区,普通GC不会对其进行回收
     2) 方法太长,引用在作用域内,导致对象不会被回收
     3) 没有释放资源(这个不解释)
     4) 内存泄露(java如果不是刻意去写,也不容易)

    实际中导致内存增长过快问题有很多种的,应该根据不同情况去分析。

    首先他自己也没说他这个是项目还是网站,如果是后者,并发量很高的情况下,可以直接从日志里面定位频繁调用方法,另外也可以通过jstatck(加上参数-l)看看是否有死锁
  
    如果业务中有对操作大数据量的代码,可以采用多线程、自定义分页等方式来提高效率,减少对象占用内存时间
   
    如果是对GC监控可以使用jstat,想监控堆空间可以使用jmap
  
    另外:姑且猜测你如果用两台是现在服务器性能4分之1的服务器做集群,会比你现在情况好得多,浪费配置了..哎~
   
0 请登录后投票
   发表时间:2011-10-17  
是一个政府项目,用的spring3.0.5+hibernate3.6.5,用hibernate的分页,tomcat6.0.29,前面是apache2,jdk16_05 x86_64位,链接池dbcp。
0 请登录后投票
   发表时间:2011-10-17  
我觉着你的你把虚拟机的堆开的很大,但是又不能很快的释放,导致了在做full gc时需要花费很长的时间,使系统响应变慢。另外,就是你的系统内存涨的这么快,实在不正常。但这里猜不出到底是为什么。

你真的需要这么大的jvm内存吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics