我正在使用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使用更少的内存/知道它为什么要使用这么多内存。就像现在一样,它一直持续到它使用整个系统的内存。
答案 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/来做到这一点。
如果您这样做但仍然不知道为什么,那么请告诉我们您的记忆中有哪些物品......