我发现我的整个应用程序混乱了。第一个日志为mingled up。应用程序似乎在每个常规间隔后都冻结了,每分钟左右冻结了将近半分钟。执行大部分任务的常规线程似乎丢失了,没有任何痕迹。所有这些都是从记录。套接字似乎已根据用户报告挂断。
仍然很少有线索,是什么触发了所有这些。 CPU使用记录显示当时一切正常。待我猜测,您能指出一个起点或任何实例逃避我的想法,但我可以解密所有这些混乱的可能原因。
谢谢,
毛维娅
最佳答案
当我在有限内存的虚拟盒子上运行大量使用GC的Java应用程序时,遇到了这种行为。来宾操作系统没有足够的“物理”内存,因此它使用了交换内存。但是交换位于映射到主机OS物理磁盘的“虚拟”磁盘上。
当运行在来宾OS上的Java GC开始工作时,它必须从实际位于主机OS物理磁盘上的堆中删除垃圾。
我不想说您的情况是相同的,但可能是相似的。因此,请尝试检查您有多少物理内存,GC多长时间运行一次以及尝试清除多少内存。您给JVM分配了1GB。您是否有足够的物理内存?也许您的JVM堆实际上位于操作系统交换内存中,即磁盘上?
尝试调查您的应用程序。它是否有可能分配大量内存并过于频繁地对其进行清理?是否可以使用缓存等?检查perm gen占用了多少内存,以及寿命短的对象如何占用内存。
关于java - Java应用程序状态不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10195293/