我想我可能在jetty 8.1.7上运行的servlet应用程序中有内存泄漏。
答案 0 :(得分:2)
是的,两者都可以使用:VisualVM
轻松实现(请参阅:http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/monitor_tab.html)默认情况下,这个版本随Oracle JDK一起提供(=>无需额外安装)
然而,对于内存泄漏检测,我建议进行内存转储并稍后使用eclipse MAT
(http://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
连接到它答案 3 :(得分:0)
您可以使用%JAVA_HOME%\ bin文件夹下的jvisualvm.exe。通过使用此应用程序,您可以监视内存使用情况并强制执行gc。