Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring内存使用率过高_Java_Spring_Hibernate_Spring Mvc_Memory Leaks - Fatal编程技术网

Java Spring内存使用率过高

Java Spring内存使用率过高,java,spring,hibernate,spring-mvc,memory-leaks,Java,Spring,Hibernate,Spring Mvc,Memory Leaks,我有一个结合了Spring和Hibernate的webapp。我在Tomcat服务器上本地部署它,内存消耗约为150-200 Mb,据我所知,这一点都不高。但很明显,在WebSphere上运行的生产部署中,我获得了500Mb的内存使用量和非常高的垃圾收集频率 起初我把问题归咎于Hibernate(如中所示),但现在我不知道是什么导致了这种明显的高使用率 我尝试使用MAT分析我的应用程序,以下是我的直方图结果: 我在分析内存方面没有太多经验,大多数时候我感觉自己好像是在故障后查看汽车的引擎,但

我有一个结合了Spring和Hibernate的webapp。我在Tomcat服务器上本地部署它,内存消耗约为150-200 Mb,据我所知,这一点都不高。但很明显,在WebSphere上运行的生产部署中,我获得了500Mb的内存使用量和非常高的垃圾收集频率

起初我把问题归咎于Hibernate(如中所示),但现在我不知道是什么导致了这种明显的高使用率

我尝试使用MAT分析我的应用程序,以下是我的直方图结果:

我在分析内存方面没有太多经验,大多数时候我感觉自己好像是在故障后查看汽车的引擎,但在我看来,char[]引用与spring内部的bean“数据库”相关。我对spring的mvc组件和事务使用基于注释的配置:

<tx:annotation-driven />
<context:annotation-config />

您是否发现其中任何一个值异常高?你能帮我找出这个问题吗

另外,这是我对接近完整堆的堆转储的控制 你的两个问题(通常)都是正常的

运行的垃圾回收器通常表示正在进行大量的处理,特别是创建大量对象的处理(如jdbc)。除非您的服务器在垃圾收集过程中变得无响应,否则无需担心。如果在垃圾收集之后它没有返回到基线内存(锯齿内存图的底部),则可能发生泄漏

高内存使用率也是正常的,特别是如果您为生产JVM提供的内存比本地JVM多的话。比较您的启动参数,确保它们相同,然后再尝试比较它们的性能结果

[我知道这不是一个真正的答案,但它太长了,无法放入评论中]

你的两个问题(通常)都是正常的

运行的垃圾回收器通常表示正在进行大量的处理,特别是创建大量对象的处理(如jdbc)。除非您的服务器在垃圾收集过程中变得无响应,否则无需担心。如果在垃圾收集之后它没有返回到基线内存(锯齿内存图的底部),则可能发生泄漏

高内存使用率也是正常的,特别是如果您为生产JVM提供的内存比本地JVM多的话。比较您的启动参数,确保它们相同,然后再尝试比较它们的性能结果

[我知道这不是一个真正的答案,但它太长了,无法放入评论中]

你的两个问题(通常)都是正常的

运行的垃圾回收器通常表示正在进行大量的处理,特别是创建大量对象的处理(如jdbc)。除非您的服务器在垃圾收集过程中变得无响应,否则无需担心。如果在垃圾收集之后它没有返回到基线内存(锯齿内存图的底部),则可能发生泄漏

高内存使用率也是正常的,特别是如果您为生产JVM提供的内存比本地JVM多的话。比较您的启动参数,确保它们相同,然后再尝试比较它们的性能结果

[我知道这不是一个真正的答案,但它太长了,无法放入评论中]

你的两个问题(通常)都是正常的

运行的垃圾回收器通常表示正在进行大量的处理,特别是创建大量对象的处理(如jdbc)。除非您的服务器在垃圾收集过程中变得无响应,否则无需担心。如果在垃圾收集之后它没有返回到基线内存(锯齿内存图的底部),则可能发生泄漏

高内存使用率也是正常的,特别是如果您为生产JVM提供的内存比本地JVM多的话。比较您的启动参数,确保它们相同,然后再尝试比较它们的性能结果

[我知道这不是一个真正的答案,但它太长了,无法放入注释]

您是否意识到(除非您使用Liberty Profile),与Tomcat相比,WebSphere在您的类路径中添加了大量额外的jar文件?因此,在WebSphere下,绝对可以预期会有更大的内存占用

过多的垃圾收集意味着您没有为应用程序JVM分配足够的内存。给它更多的内存(例如2G),并通过JConsole或类似工具查看运行时内存使用图。在更轻松的垃圾收集之前,观察它达到了什么内存消耗,并利用它来了解JVM真正需要多少内存

请注意,如果在每次垃圾收集之后,图形没有返回到安全的基线,而只是部分减少,那么您可能存在内存泄漏。

您确实意识到(除非您使用Liberty Profile),与Tomcat相比,WebSphere在您的类路径中堆积了大量额外的jar文件?因此,在WebSphere下,绝对可以预期会有更大的内存占用

过多的垃圾收集意味着您没有为应用程序JVM分配足够的内存。给它更多的内存(例如2G),并通过JConsole或类似工具查看运行时内存使用图。在更轻松的垃圾收集之前,观察它达到了什么内存消耗,并利用它来了解JVM真正需要多少内存

请注意,如果在每次垃圾收集之后,图形没有返回到安全的基线,而只是部分减少,那么您可能存在内存泄漏。

您确实意识到(除非您使用Liberty Profile),与Tomcat相比,WebSphere在您的类路径中堆积了大量额外的jar文件?因此,绝对需要更大的内存占用空间