【发布时间】:2010-12-01 07:26:27
【问题描述】:
我有一个在 linux 服务器上运行的独立 Java 问题。我用-Xmx256m 启动了jvm。我连接了一个 JMX 监视器,可以看到堆从未真正超过 256Mb。但是,在我的 linux 系统上,当我运行 top 命令时,我可以看到:
1) 首先,这个进程的RES内存使用量在350Mb左右。为什么?我想这是因为堆外的内存?
2) 其次,该进程的VIRT内存使用量不断增长。它永远不会停止!它现在显示为 2500Mb!那我有泄漏吗?但是堆并没有增加,它只是循环!
最终这会带来一个问题,因为系统的交换会不断增长,最终系统会死掉。
有什么想法吗?
我想问的一个重要问题是,在哪些情况下这可能是我的代码而不是 JVM、内核等的结果。例如,如果线程数不断增长,那是否适合我的观察的描述?有什么类似的东西可以建议我注意吗?
【问题讨论】:
-
java 版本 "1.6.0_13" Java(TM) SE Runtime Environment (build 1.6.0_13-b03) Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02,混合模式)
标签: java linux optimization memory heap-memory