2012-04-17 50 views
0

我发现我的整个应用程序混乱了。第一个日志得到mingled up。应用程序似乎在每隔一段时间后都会冻结,每分钟左右冻结几乎半分钟左右。执行大部分任务的正常线程似乎已经丢失,并且没有它们的踪迹。所有这些都是从日志记录。套接字似乎已根据用户的报告挂起。Java应用程序不一致状态

还是很少有线索,是什么引发了这些。当时CPU使用率记录显示一切正常。由于我只能猜测,你能指出一个起点或任何特定的实例逃离我的想法,打我可以解密所有这些混乱的可能原因。

感谢, Mawia

+0

您是否检查过内存使用情况? JVM的堆栈限制是多少?我的意思是'-Xmx'命令行选项。 – AlexR 2012-04-17 16:40:21

+0

xms -1000MB XMX-1500MB! – mawia 2012-04-17 16:42:12

+0

如果代码很大,请缩小问题范围并将其发布在此处。我可以告诉你,定期冻结的时间间隔可能是因为你无意中推迟了一个线程,但没有办法真正知道如果没有看到代码是真的。 – 2012-04-17 16:48:50

回答

2

我在运行java应用程序时遇到了这种行为,该应用程序在内存有限的虚拟盒子上非常使用GC。来宾操作系统没有足够的“物理”内存,因此它使用交换内存。但交换是在映射到主机操作系统物理磁盘的“虚拟”磁盘上进行的。

当在guest虚拟机操作系统上运行java GC开始工作时,它必须从实际位于主机操作系统物理磁盘上的堆中移除垃圾。

我不想说你的情况是相同的,但可能它是相似的。因此,请尝试检查您拥有多少物理内存以及您的GC运行的频率以及尝试清除多少内存。你给你的JVM 1GB。你有足够的物理记忆吗?可能你的JVM堆实际上位于OS交换内存中,即在磁盘上?

尝试调查您的应用程序。是否有机会分配大量内存并且经常清理它?是否有可能使用缓存等?检查烫发器使用了多少内存,以及如何使用短生命的对象。

1

你为什么不尝试连接到你的程序与基于抽样监测工具,看看线程和JVM子系统在做什么? JVisualVM附带JDK,使用起来非常简单。

+0

啊!这已经被附加了。但所有这些都发生在过去,当时没有人监视系统。 – mawia 2012-04-17 17:00:26