2012-04-17 85 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