Linux:Java web应用程序内存不足,没有响应请求但没有抛出内存?

Linux:Java web应用程序内存不足,没有响应请求但没有抛出内存?,java,linux,out-of-memory,stack-trace,heap-dump,Java,Linux,Out Of Memory,Stack Trace,Heap Dump,在Linux服务器上,已为应用程序指定了vm参数(Xmx=3GB,Xms=3GB)。通过查看堆转储,可以看出已使用了超过2.9 GB的内存。32 MB内存用于无法访问的对象 但应用程序没有抛出OOM,而是停止响应。因此,有必要手动重新启动应用程序 我可以看到许多线程(96个)正在堆栈跟踪中某个特定对象的监视器上等待。这有用吗?另外,2.9GB的空间大部分被缓存对象占用,我认为这是正常的。MAT仅将这些缓存对象显示为泄漏可疑对象 通过查看堆转储和堆栈跟踪,试图找出是什么导致它没有响应,但看不到任何

在Linux服务器上,已为应用程序指定了vm参数(Xmx=3GB,Xms=3GB)。通过查看堆转储,可以看出已使用了超过2.9 GB的内存。32 MB内存用于无法访问的对象

但应用程序没有抛出OOM,而是停止响应。因此,有必要手动重新启动应用程序

我可以看到许多线程(96个)正在堆栈跟踪中某个特定对象的监视器上等待。这有用吗?另外,2.9GB的空间大部分被缓存对象占用,我认为这是正常的。MAT仅将这些缓存对象显示为泄漏可疑对象


通过查看堆转储和堆栈跟踪,试图找出是什么导致它没有响应,但看不到任何特殊情况。

您的应用程序存在内存泄漏。试着找到它,有一些很好的工具,比如。

通常,在使用OOM之前,应用程序的速度非常慢


在您的情况下,您应该通过示例使用VisualVM评测您的应用程序

我试过了,但它是一个巨大的堆转储文件。虽然VisualVm可以在调整.ini文件上的Xmx选项后打开它,但没有发现任何东西。此外,应用程序现在运行良好,但我们需要在出现错误情况时调查bhavior。在这种情况下,它应该抛出OOM。我试过VisualVm,发现大部分(3 GB中的2.9 GB)内存都在使用中,但仍然没有得出任何结论。你必须学会如何使用VisualVm。。。在不同的时间拍摄内存快照,并就新对象进行比较。如果是test env,我会这样做的。但我正在做事后分析。@RajuSingh VisualVM是您要找的。如果你不想付出任何努力,你就解决不了你的问题。我已经告诉过你,它现在是不可复制的。我已经使用VisualVM很长时间了。这是我仅有的一堆。当我运行应用程序的时候,现在已经不是问题了。我只是想问,除了VisualVM或MAT建议之外,还有什么值得怀疑的地方呢?只是想一想:如果您指定初始堆大小与最大值相同,那么(在您的情况下)大约会有2.9Gb的利用率。你试过了吗?例如:Xms=512M?