【发布时间】:2012-06-15 13:51:09
【问题描述】:
我有一个部署到生产环境的应用程序,由于某些内存泄漏,它有时会抛出 OutOfMemory 异常。它在一个无头 ubuntu 盒子上运行,我不希望在该盒子上远程连接 visualvm、jconsole 等。有没有办法让jvm 做 gc(比如在 visualvm 中,您只需单击一个按钮即可)。
我想运行jmap -histo:live <pid> 和这个 gc 命令,以找出哪些对象在 gc 中幸存。哪些对象数量正在增长等。现在我可以看到一些意外的对象数量,但它发生在我的许多域对象中,所以我不确定它是延迟 gc 还是内存泄漏。
简而言之,我正在寻找针对jvm pid 运行的linux 命令,以使其执行gc。不是 system.gc。
【问题讨论】:
-
如果由于内存泄漏导致内存不足,运行 gc 将无济于事。当 gc 无法删除“死”对象时,就会发生内存泄漏,因为存在对它们的隐藏引用。
-
是的,看起来像复制品。感谢您的链接。当我搜索/输入 q 时,我没有看到它出现。
-
OOM 意味着你没有更多的内存(或者至少在 GC 完成后没有足够的连续空间是它的东西。它已经执行了,再做一遍如何启动并不能解决任何问题。你可以检测到应用程序没有运行并重新启动它作为临时措施,但您需要做的是整理代码。应该超出范围的东西不是。
标签: java linux memory-leaks garbage-collection jvm