如何调查过多的java垃圾回收

mch*_*chr 6 java tomcat

我有一个Tomcat实例,它表现出以下行为:

  • 接受单个http传入请求.
  • 向后端服务器发出一个请求并返回大约400kb的XML.
  • 通过此XML并将其转换为大约400kb的JSON.
  • 返回JSON响应.

问题是,在处理400k请求的过程中,我的webapp会产生大约100mb的垃圾,这些垃圾填满了Eden空间并触发了年轻一代的收集.

我曾尝试使用内置的java hprof功能来进行分配站点分析,但Tomcat似乎没有正确启动它.有可能我只是有点不耐烦,因为我认为内存分配分析具有很高的开销,因此tomcat启动可能需要很长时间

用于对非常年轻的对象/垃圾进行java内存分析的最佳工具是什么?我不能使用堆转储,因为我感兴趣的对象是垃圾.

Tho*_*sen 1

可以使用JDK中jvisualvm中的profiler来进行内存分析。

另请查看用于缓存 XSLT 转换器的模板。

http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/Templates.html

  • 在 Linuxbox 上安装相应的 JDK,然后重定向 jvisualvm 以使用在 Windows box 上运行的 X11 服务器。直接在机器上使用 Xming,或者在 vmware 会话中运行 Knoppix,效果都非常好。 (2认同)
  • 另请注意,如果您将适当的 voodoo 添加到 Tomcat JVM 调用中,jvisualvm 可以从您的 Windowsbox 进行连接,无需再做进一步的处理。 (2认同)