gpt4 book ai didi

java - Apache Servicemix - 堆空间问题 - 如何解决?

转载 作者:行者123 更新时间:2023-12-02 06:01:17 26 4
gpt4 key购买 nike

我们在生产中有一个 apache servicemix 实例(版本 3.3.1),它运行我们的 bpel 流程(使用 apache ode 1.3.5 )和一些 Camel 代码(用于路由)。问题是,servicemix 进程已用堆空间不断增加。最终它耗尽空间并崩溃。因此,我们必须每 7-8 天重新启动一次该过程。 (这非常非常烦人)

当前进程的jvm内存配置如下
-Xms512M -Xmx2048M -XX:PermSize=512m -XX:MaxPermSize=1024m

我们还有另一个具有相同内存配置的 servicemix 实例,但运行负载稍低,运行大约 20-22 天,然后超过分配的堆空间。显然,较小的负载有助于其长时间运行。

我的问题

  1. 有人在使用上述版本的 apache servicemix 时遇到过同样的问题吗?
    (在初始阶段,我想确定它是与容器相关的泄漏还是与应用程序相关的问题)

  2. 您如何解决这个问题?我可以应用一种方法来找出问题吗?如果是这样,任何人都可以列出其中涉及的步骤吗?
    (网上的内存泄漏解决文章似乎更多地强调导致内存泄漏的理论,而不是解决它应该采取的步骤)

需要您对此的想法、建议和意见。

谢谢,
阿伦·乔利

最佳答案

通常当我们遇到这个问题时,我们会生成一个堆转储文件,堆转储是Java进程在某个时间点的内存快照。保存这些数据有不同的格式,根据格式的不同,它可能包含不同的信息,但一般来说,快照包含有关触发快照时堆中的 java 对象和类的信息。

生成堆转储文件的方法有很多,但在您的情况下,您可以添加此参数以在发生 OutOfMemoryError 时自动生成堆转储文件:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=[HeapDirPath]

因此,这个文件将允许您找出填充整个空间的对象是什么,然后您将轻松找出导致内存泄漏的代码。

您可以使用Eclipse memory Analyzer分析此类转储文件。

关于java - Apache Servicemix - 堆空间问题 - 如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22662900/

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