2012-03-23 2 views
1

Linux 컴퓨터 (RHEL 5)에서 Java 6을 실행하고 있으며 프로그램이 가끔 컴퓨터 입력을 잠급니다. 마우스 클릭이나 키보드 스트로크는 작동하지 않습니다. 이상하게도 마우스 커서를 움직일 수 있으며 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

+0

@ GarretHall : CTRL + ALT + F2가 "다소"작동하는 경우에도 X 서버를 죽이는 것을 허용하는 바로 가기가 여전히 작동 할 것이라고 확신합니다. 내 요점은 : SSH는 시스템을 잠금 해제하는 유일한 방법이 아닐 것입니다.) (귀하의 질문에 +1했다) – TacticalCoder

답변

1

당신이 묘사하는 증상은 출시되지 않은 X11 키보드 & 포인터 잡기처럼 보입니다. 이것은 버그가 있거나 응답이없는 GUI -> X11 레이어로 인해 쉽게 발생할 수 있습니다. GUI 스레드를 신중하게 확인하십시오.

1

가능성이 가장 높은 것은 당신이 따라서, 사용자 입력 이벤트를 서비스하여 UI가 응답 만들기에서 그것을 방지, 이벤트 발송 쓰레드에 긴 실행 작업을 수행하고 있다는 점이다 : 교착 상태가 여기에있을 것 같다.

jstack 또는 JConsole을 실행하고 "AWT EventQueue"에 대한 스택 추적을 보면이를 확인할 수 있습니다.

또 다른 대안은 합법적 인 UI 작업을 수행하고 있지만 기본 코드가 비효율적이라는 것입니다. 예를 들어, 1000,000 개의 행을 포함하는 JTable을 정의하고 LinkedList에 밑받침 TableModel을 기반으로하여 행당 O (n) 액세스를 유도 할 수 있습니다.

관련 문제