加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Java内存之谜(我有泄漏)?

发布时间:2020-12-13 18:58:59 所属栏目:Linux 来源:网络整理
导读:我有一个在Linux服务器上运行的独立Java问题.我用-Xmx256m启动了jvm.我附加了一个JMX监视器,可以看到堆永远不会真正通过256Mb.但是,在我的linux系统上运行top命令时,我可以看到: 1)首先,此过程的RES内存使用量约为350Mb.为什么?我想这是因为堆外的内存? 2

我有一个在Linux服务器上运行的独立Java问题.我用-Xmx256m启动了jvm.我附加了一个JMX监视器,可以看到堆永远不会真正通过256Mb.但是,在我的linux系统上运行top命令时,我可以看到:

1)首先,此过程的RES内存使用量约为350Mb.为什么?我想这是因为堆外的内存?

2)其次,这个过程的VIRT内存使用量不断增长和增长.它永远不会停止!它现在显示在2500Mb!我有泄漏吗?但堆不会增加,它只是循环!

最终这会带来问题,因为系统的交换不断增长并最终导致系统死亡.

有什么想法发生了什么?

我想问的一个重要问题是,这可能是我的代码而不是JVM,kernal等的一些情况.例如,如果线程数量不断增长,那么这符合我观察的描述吗?你可以建议我注意哪些类似的东西?

最佳答案
一些潜在的问题:

>直接分配的缓冲区和内存映射文件在Java堆外部分配,不能方便地处理.
>为每个新线程保留堆栈区域.
>永久生成(代码和实习字符串)超出了通常的堆栈.它可能是一个问题,类加载器泄漏(通常在重新加载webapps时).
> C堆可能正在泄漏.

pmap -x应该显示你的记忆是如何消失的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读