如何检查内存使用情况并强制进行jetty应用程序的垃圾收集

时间:2013-01-22 14:56:06

标签: java memory-leaks garbage-collection jetty

我想我可能在jetty 8.1.7上运行的servlet应用程序中有内存泄漏。

  1. 有没有办法看到在一个实例中实际使用了多少堆内存,而不是使用-Xmx分配的最大内存,而是实际使用的内存量。
  2. 我是否可以强制在jetty中运行的应用程序进行垃圾收集

4 个答案:

答案 0 :(得分:2)

是的,两者都可以使用:VisualVM轻松实现(请参阅:http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/monitor_tab.html)默认情况下,这个版本随Oracle JDK一起提供(=>无需额外安装)

然而,对于内存泄漏检测,我建议进行内存转储并稍后使用eclipse MAThttp://www.eclipse.org/mat/)对其进行分析,因为它具有非常好的UI可视化java内存转储。

修改

对于仅ssh访问,是的,您可以使用上述两个工具。但是你需要在运行窗口管理器的机器上运行它们,并通过ssh远程连接到另一台机器(你需要在这两台机器上安装java):

  • 对于visualVM:您需要在一台机器上运行VisualVM,并通过ssh连接到远程机器,请参阅:VisualVM over ssh
  • 并且对于内存转储:使用jmap(对于示例用法,请参阅:http://kadirsert.blogspot.de/2012/01/ ...)然后下载转储文件并在本地加载到eclipse MAT

答案 1 :(得分:0)

您可以致电System.gc()。这将通常执行完整的GC ......但可以禁用此功能。 (有一个JVM选项可以使用HotSpot JVM执行此操作。)

但是,如果您的问题是内存泄漏,运行GC将无法帮助。事实上,它可能会使您的服务器比现在更慢。

您还可以监视内存使用情况(以各种方式 - 请参阅其他答案),但这只能为您提供内存泄漏可能泄漏的证据。

您真正需要做的是找到并修复内存泄漏的原因

参考:

答案 2 :(得分:0)

启用jmx并使用jconsole

连接到它

http://wiki.eclipse.org/Jetty/Tutorial/JMX

答案 3 :(得分:0)

您可以使用%JAVA_HOME%\ bin文件夹下的jvisualvm.exe。通过使用此应用程序,您可以监视内存使用情况并强制执行gc。