【发布时间】:2015-02-17 09:08:03
【问题描述】:
我是 java 内存问题的新手,在调试 java 进程的内存使用时遇到问题,需要您的帮助。 按照“top”,java进程占用了8G的常驻内存和9.4G的虚拟内存。这对于该过程的作用来说太多了,我想检查它为什么会消耗内存。所以我使用 jmap 进行了堆转储(没有“live”选项,因为它可能会触发 GC),发现只有 100MB 的活动对象存在,并且有 1.5G 的无法访问的对象。那么剩下的 6G 内存去哪儿了?我应该检查哪些其他类型的非堆内存?另外,你能用任何工具/unix命令帮我找出来吗?
JVM 参数:-Xms 为 2G,-Xmx 为 8G
如果我应该在此处添加更多信息以便为您提供更多背景信息,请告诉我。
提前致谢。
【问题讨论】:
-
听起来像是内存泄漏,我不知道在 Java 中什么会导致这种行为,但也许我会找到一些东西。您能否发布一些代码或详细说明该程序的目的和作用?
-
它从服务接收数据,将其从自定义格式转换为 json 并写入另一个 Web 服务。它是实时发生的,除了转换所需的短暂持续时间外,不会将数据保留在内存中。它不断打开和关闭与源服务和目标服务的连接。