gpt4 book ai didi

java - JBoss 中的内存泄漏

转载 作者:行者123 更新时间:2023-12-02 03:34:28 25 4
gpt4 key购买 nike

我在 JBoss 中的行为非常奇怪,我想利用 SO 人群的集体智慧。

我们使用 JBoss(我认为是 4.0.4)来服务 SOAP 调用。事实上,它只是用作美化的 RPC 服务器,仅此而已。当我们有 20 多个客户端同时发送请求时,我们的内存就会耗尽。这些请求由传入的相当小的请求(正确的 SOAP)和返回的结果数据包组成,该结果数据包本质上是一个长 SOAP 字符串(并且该字符串的内容是 XML)。是的,我意识到这不是最理想的。别问。

我已将泄漏追溯到 org.jboss.axis.message.SAX2EventRecorder 的一个实例,该实例包含 400 万个对象(字符串和整数)。现在,即使是最长的响应也不携带 4MB 的数据。请求均小于 40K。那里有些可疑,但我在网上找不到任何文档。

谁能告诉我录音机是做什么用的?我该如何摆脱它?或者可以将其配置为更少的内存需求?如有任何帮助,我们将不胜感激。

<小时/>

更新:澄清一下 - 我确实进行了内存转储,转储显示了一个数组或 4,000,000 多个对象、字符串和整数。该数组由 org.jboss.axis.message.SAX2EventRecorder 所有,而 org.jboss.axis.message.SAX2EventRecorder 又由这些人持有:

org.jboss.axis.message.SOAPEnvelopeAxisImpl@0x19c31fd8(141字节):字段记录器org.jboss.axis.message.RPCParamElementImpl@0x19c32260(123字节):字段记录器org.jboss.axis.message.SOAPBodyAxisImpl@0x19c32160(121字节):字段记录器org.jboss.axis.message.RPCElement@0x19c321e0(124字节):现场记录器org.jboss.axis.encoding.DeserializationContextImpl@0x19c332f0(67字节):字段记录器org.jboss.axis.message.SAX2EventRecorder$objArrayVector@0x19c33398(24字节):字段this$0

我们自己的应用程序的数据结构相当臃肿,但还不到这个程度。

另一个更新:权力已经找到了“权力解决方案”:我们正在切换到 64 位内存。欢呼。

最佳答案

使用 JVM arg -XX:-HeapDumpOnOutOfMemoryError 运行。当内存不足时,这将为您提供堆转储。然后,您可以使用jhat工具(它随您的JDK一起提供)分析堆转储。或者,您可以使用jconsole工具(该工具也随您的JDK一起提供)通过内存管理MBean随时请求堆转储。

它会告诉您这 400 万个对象实际包含什么,这可能会让您深入了解软件不释放该内存的原因。

编辑:

看来您并不是唯一遇到此问题的人。已向 Axis 提交 2 个错误报告

AXIS-2698

AXIS-2749

另请参阅AXIS-1771 ,它有一些关于反序列化和调解其影响的方法的有趣信息。您使用的是哪个版本的 Axis?

关于java - JBoss 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com