2012-03-23 24 views
1

我在Linux機器上運行Java 6(RHEL 5),我的程序偶爾鎖定了輸入到計算機的內容。沒有鼠標點擊或鍵盤筆畫工作。奇怪的是,鼠標光標可以移動並且CTRL + ALT + F2命令可以工作(儘管它不會顯示終端)。什麼可能導致JVM鎖定機器的鼠標點擊和鍵盤輸入?

使用topjvisualvm我看不到內存泄漏或其他問題。但是,解凍電腦的唯一方法是從另一臺計算機中取出ssh並殺死java進程。什麼可能是這種行爲的原因?

我可以通過降低內存天花板偶爾重現它。這似乎是僵局可能會在這裏:

"Java2D Disposer" daemon prio=10 tid=0xae7d6800 nid=0x4451 in Object.wait() [0xae6ad000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) 
    - locked <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) 
    at sun.java2d.Disposer.run(Disposer.java:127) 
    at java.lang.Thread.run(Thread.java:662) 
+0

*「解凍電腦的唯一方法是從另一臺計算機ssh並殺死java進程」* ...這將是一個相當糟糕的Linux設置; )如果這證明是一個問題,重新編譯一個內含MagicSysRQ的內核(你可能已經擁有了它)。除此之外,它還提供了在低得多的級別攔截擊鍵並殺死進程等的可能性。當你有6個月的正常運行時間和/或不想重新啓動並且無法通過SSH進入時,可以變得方便。 – TacticalCoder 2012-03-23 15:48:00

+0

@GarretHall:如果CTRL + ALT + F2是「有點」工作,我敢肯定,允許殺死你的X服務器的捷徑仍然可以工作。我的觀點是:SSH很可能*不是*解鎖系統的唯一方式; )(+1表示你的問題) – TacticalCoder 2012-03-23 15:49:13

回答

1

您描述的症狀在我看來似乎是未發佈的X11鍵盤&指針抓取。這可能很容易由錯誤或無響應的GUI - > X11層引起。仔細檢查你的GUI線程。

1

最有可能的是,你在事件調度線程中執行長時間運行的任務,防止其服務用戶輸入事件,從而使你的UI響應。

您可以通過運行jstack或JConsole並查看「AWT EventQueue」的堆棧跟蹤來驗證此問題。

另一種選擇是您正在執行合法的UI任務,但在底層代碼中效率低下。例如,您可能已經定義了一個包含1000,000行的JTable,並在LinkedList的基礎上使用了下劃線TableModel,從而導致每行有O(n)個訪問。

相關問題