论坛首页 Java企业应用论坛

应用大概两周就内存爆掉.....

浏览 13417 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-30  
根据内存的变化,感觉,socket 的回收不是发生在关闭之后,而是JVM每隔一段时间就回收一次关闭之后的socket.
0 请登录后投票
   发表时间:2010-07-30  
如果是jdk6,你可以用jdk6自带的jvisualvm工具profile一下。
对于刚才说的没法远程使用的问题,你可以在服务器上先启动vncserver,然后用vnc链接来启动jvisualvm或者你们使用的jprofile。
0 请登录后投票
   发表时间:2010-07-30  
m7788 写道
仔细看看发送和接收的代码,很有可能是,都被byte[]占了

 

    没有任何自定义的类变量或者对象变量是byte[] 类型或者 char[] 类型,现在感觉这些泄漏的应该是从inputstream,outputstream里面的....

0 请登录后投票
   发表时间:2010-07-30  
像你碰到的这种Java Heap泄露其实是非常容易检查出原因的。jdk6的话,先用jmap dump出heap文件,然后使用Eclipse Memory Analyzer分析,Eclipse Memory Analyzer的内存泄露分析出来的结果基本上已经八九不离十了。如果是jdk6以下的话,只能用jmap -histo {pid},看对象统计信息,这个会比较麻烦一点,但从输出结果+自己分析,基本上还是能定位到原因的。
0 请登录后投票
   发表时间:2010-07-30  
kongxx 写道
如果是jdk6,你可以用jdk6自带的jvisualvm工具profile一下。
对于刚才说的没法远程使用的问题,你可以在服务器上先启动vncserver,然后用vnc链接来启动jvisualvm或者你们使用的jprofile。

    谢谢..可是我们是jdk5...

 

0 请登录后投票
   发表时间:2010-07-30  
tmj_159 写道
根据内存的变化,感觉,socket 的回收不是发生在关闭之后,而是JVM每隔一段时间就回收一次关闭之后的socket.

 

    没看懂.....

    是不是没有关闭的socket不回收?

    如果关闭的socket就可以回收的话是不是就和平常的对象一样对于gc是没有什么特别之处的?

0 请登录后投票
   发表时间:2010-07-30  
michael.softtech 写道
唉,jprofiler没法用啊...公司的机房管理很严格,哪台机器开哪个端口都要申请才行。
死循环应该不存在,否则CPU占用率应该会很高。
死锁也不存在,threaddump里面已经看过了。
但就是old区内存一个劲疯涨....
大概一周就要重启一次。
先释放资源看看吧,因为堆里面好多socket的实现类对象。只是有个疑问,socket对象在什么情况下回收啊?大伙有谁知道啊。
比如:我这边没有关闭,对方已经关闭了而对我这里而言不知道这个socket已关闭的socket?


这是问题的两个层面:
1、如果socket关闭或超时,操作系统是知道的,他会回收系统资源,如果不能回收,操作系统的描述符很快就会用完,这时就不能再创建socket,客户端也就不能再连接了。
2、现在是操作系统已经回收了资源,但jvm回收的标准是这个对象是否还存在引用,如果你的程序用完socket不释放引用,jvm会认为此对象还需使用,就一直不会释放。
分析你的情况应该和socket用完不关关系不大,但也是问题,可能是你的程序有BUG,引用了socket,在不用时没有解除引用,造成内存泄漏。重点看下list这些数据结构。

0 请登录后投票
   发表时间:2010-07-30  
是不是你把socket放到map里了,而没有及时清理?
0 请登录后投票
   发表时间:2010-07-30  
michael.softtech 写道
kongxx 写道
如果是jdk6,你可以用jdk6自带的jvisualvm工具profile一下。
对于刚才说的没法远程使用的问题,你可以在服务器上先启动vncserver,然后用vnc链接来启动jvisualvm或者你们使用的jprofile。

    谢谢..可是我们是jdk5...

 

呵呵,你怎么只看了我上一句,没看我下一句

0 请登录后投票
   发表时间:2010-07-30  
呵呵,连到底是不是socket的原因都不确定,就在讨论怎么修改的问题
0 请登录后投票
论坛首页 Java企业应用版

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