我怎样才能找出为什么Tomcat使用如此多的内存并阻止它?

时间:2014-08-06 23:57:48

标签: java tomcat memory-management jvm tomcat7

我正在使用YourKit Java Profiler分析我的webapp。 webapp在tomcat 7 v30上运行,我可以看到JVM的堆大约是30兆字节,但是Tomcat.exe正在使用200兆字节并且不断上升。

屏幕截图:http://i.imgur.com/Zh9NGJ1.png (左边是Java正在使用的内存分析器,右边是Windows使用的tomcat.exe)

我已尝试向tomcat添加不同的标志,但内存使用量仍在不断上升和上升。我已经尝试过预编译我的.jsp文件以防万一,但它没有。

我添加到tomcat的java标志的标志:

-XX:+UseG1GC
-XX:MinHeapFreeRatio=10
-XX:MaxHeapFreeRatio=10
-XX:GCTimeRatio=1

如果重要的话,Tomcat也作为Windows服务运行。

我需要帮助找出如何让tomcat使用更少的内存/知道它为什么要使用这么多内存。就像现在一样,它一直持续到它使用整个系统的内存。

3 个答案:

答案 0 :(得分:1)

所以我找到的解决方案是在tomcat运行中添加一些标志。

不确定它是哪个标志。我认为它可能是我们正在使用的jacob库,或者这些标志的一些组合。希望这可以在将来帮助人们。

-XX:+UseG1GC
-XX:MinHeapFreeRatio=10
-XX:MaxHeapFreeRatio=10
-XX:GCTimeRatio=1
-Dcom.jacob.autogc=true
-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true

答案 1 :(得分:0)

您应该在应用程序中查找内存泄漏,或者查看过长且未失效的大型会话。尝试考虑哪些功能可以长时间保存太多对象。

答案 2 :(得分:0)

您可以转储Yor内存并查看正在使用它的内容。可能它将是您的应用程序对象的长列表,或者您在不知不觉中内化的字符串。

你可以使用像jvisualvm这样的工具,或者使用一个很酷的日食工具http://www.eclipse.org/mat/来做到这一点。

如果您这样做但仍然不知道为什么,那么请告诉我们您的记忆中有哪些物品......