Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 Tomcat内存使用在空闲状态下增长_Java_Tomcat_Memory Leaks_Threadpool_Rmi - Fatal编程技术网

Java Tomcat内存使用在空闲状态下增长

Java Tomcat内存使用在空闲状态下增长,java,tomcat,memory-leaks,threadpool,rmi,Java,Tomcat,Memory Leaks,Threadpool,Rmi,我在Tomcat上的内存消耗越来越大。 在启动之后什么也没有发生,但是如果某个用户登录,在Edem中的内存使用量开始增加。永生化不生长,但无论如何,它是不正常的。 我的分析表明,线程RMI TCP连接生成大量的Object[]char[]和String[]对象。我不明白出了什么问题,在哪里挖。谁启动了此线程,是postgres连接,这是什么?您正在观察您正在观察的: JVM收集关于自身的统计信息并发送给您。这会消耗内存并使用RMI传输设施 我也不认为这张图片显示的有什么问题。伊甸园基本上总是

我在Tomcat上的内存消耗越来越大。 在启动之后什么也没有发生,但是如果某个用户登录,在Edem中的内存使用量开始增加。永生化不生长,但无论如何,它是不正常的。


我的分析表明,线程RMI TCP连接生成大量的Object[]char[]和String[]对象。我不明白出了什么问题,在哪里挖。谁启动了此线程,是postgres连接,这是什么?

您正在观察您正在观察的:

JVM收集关于自身的统计信息并发送给您。这会消耗内存并使用RMI传输设施

我也不认为这张图片显示的有什么问题。伊甸园基本上总是增长缓慢,因为总有一些工作会消耗内存

一旦收集到了Eden(接近尾端时大约有200MB的内存),您可以看到大部分内存都是完全空闲的,并且很少(~8MB)在幸存者空间中结束,因为可能仍然存在对这些对象的引用。但他们似乎并没有离开幸存者,因为OldGen并没有增长,底部的直方图也显示典型的幸存者对象达到2级,然后消失了


这一切在我看来都很正常。

这很正常,不是内存泄漏。用于管理应用程序的线程不断创建和销毁对象。由于JVM垃圾回收器不急于回收未使用的内存,您会看到内存在增加。这种情况会定期发生(基于以前的统计数据),或者在内存不足时发生。如果它是一个真正的内存泄漏,那么在收集之后,您不会看到Eden内存使用率下降到几乎为零。内存泄漏显示为随时间增加的最低点(GC之后)。

没错,但服务器什么也不做,没有人连接到它,并且在生产过程中它会周期性地出现故障。监视更长时间,显示的图像完全正常。如果存在内存泄漏,您将看到OldGen(和/或PermGen)随着时间的推移而增长。一旦OldGen已满且垃圾收集无法释放足够的空间,JVM就会出错。另请参阅,以了解应包含实际问题的heapdump。即使您的服务器处于空闲状态:JVM也有一些管理任务,比如垃圾收集线程,不管它如何运行,所以总是会出现一些活动=(或者,谢谢你,好文章!我认为这不是类加载器内存泄漏,因为我们已经尝试过不重新部署,而是使用停止/启动重新启动tomcat。Heap显示其中有70 mb的HashMap和HashMap数组。我同意,但eden在本地PC上增长非常快,没有任何活动+在生产环境中tomcat开始失败你是什么意思生产无法启动/周期性失败?这似乎是另一个问题,除非您正在摆脱内存错误,或者JVM在GC之后尝试执行GC时陷入困境。事实上,我没有收到OOM异常,但在生产过程中,tomcat不时开始使用99%的cpu负载,不再响应。当您的生产停止时,tomcat会重新启动ponding,您应该进行线程转储并检查它。根据您正在使用的JVM,您还将获得内存使用情况,这可能会让您排除内存泄漏。我只是在服务器上卡住了,从中得到了heapdump。但是没有有用的信息=(按大小最大的一个:char[]和String[]