当前位置: 首页 > 知识库问答 >
问题:

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

闻人宜
2023-03-14

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

截图:http://i.imgur.com/Zh9NGJ1.png(左边是Java使用了多少内存,右边是tomcat.exe的Windows使用情况)

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

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

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

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

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

共有3个答案

劳和雅
2023-03-14

您可以转储Yor内存,看看正在使用它。实际上,它将是一长串您的应用程序对象,或者您不知不觉中内化的字符串。

你可以使用像JVM这样的工具,或者一个很酷的eclipse工具:http://www.eclipse.org/mat/来做这件事。

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

董畅
2023-03-14

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

翟曦
2023-03-14

所以我找到的解决方案是给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
 类似资料:
  • 有什么方法可以简化这段代码吗?我正好有一个白色的一块,想要得到它的位置 代码: 瓦片类: 件类:

  • 我有一个web应用程序,在Tomcat上部署该应用程序通常需要大量的时间。我怀疑某个地方的数据库连接正在等待超时,但这只是一种猜测,我想确定是什么导致了中断,这样我就可以解决这个问题。谁能给我提个建议吗?我是不是应该在Tomcat加载战争时对它进行侧写并在那里寻找线索呢?如果是的话,有没有适合初学者的教程? 如果这很重要,我的web应用程序使用spring和Hibernate。我的一个同事告诉我,

  • 但我怎么才能阻止码头服务器呢?我听说了一些关于stop.jar和start.jar的事情。我能在哪里找到它?它集成在Jetty-all-jar中吗?

  • 我有这段代码,但我不明白为什么会出现以下错误:

  • 我们的软件正在通过一个从内存流读取数据的GZipStream解压某些字节数据。这些数据以4KB的块解压缩,并写入另一个内存流。 我们已经意识到进程分配的内存远高于实际解压的数据。 示例:具有2425536字节的压缩字节数组被解压缩为23050718字节。我们使用的内存分析器显示了方法MemoryStream。设置容量(Int32值)分配的67104936字节。这是保留内存和实际写入内存之间的2.9

  • 非法尝试将非集合映射为@onetomany、@manytomany或@collectionofelements:cloudcodes.schema.generator.model.useroudata.orgunitpathid 有人能帮我提前谢谢你吗。