2010-04-05 3 views
1

RHEL OS의 1.5 java VM에서 J2SE 응용 프로그램을 실행하고 있습니다. 응용 프로그램의 작업 중 하나는 시작하는 동안 3 개의 무한대로 실행되는 사용자 스레드를 만드는 것입니다. 목적은 백엔드 DB 테이블에서 특정 유형의 요청을 확인하고 해당 작업을 수행하는 것입니다. 우리가 관찰로, 장기 실행 스레드가 갑자기 실행이 중지,하지만 여전히 추신 -ef에서, 응용 프로그램이 살아 있고 JVM 프로세스를 볼 수 있습니다Java 스레드가 갑자기 실행되지 않습니다.

| 그렙 자바

사람이 만든 스레드 된 이유에 빛을 던져 수 무한 루프에서 실행하려면 갑자기 멈 춥니 다? 이 문제와 가능한 해결책을 감지하는 방법에 어떤 아이디어가 큰 도움이 될 것입니다

관련하여

, 크리슈나

+0

이것은 교착 상태에 대한 고전적인 설명처럼 들립니다. –

답변

5

내가하는 Ctrl+Break로 응용 프로그램을 전송 스레드를 덤핑 및 출력을 분석 건의 할 것입니다. 아마도 스레드가 일부 입력 (IO)을 기다리고있을 것입니다. 아마도 그들은 교착 상태에 빠졌을 것입니다. 어쩌면 그들은 잡히지 않은 예외에서 벗어 났을 것입니다. 쓰레드 덤프는 무슨 일이 일어나고 있는지를 알려줄 것입니다. 쓰레드에서 이름을 미리 지정해두면 덤프에서 쓰레드를 식별 할 수 있습니다.

+0

스레드 덤프는 이와 같은 문제를 해결하는 절대적인 방법입니다. 스레드가 무엇인지 확신 할 수 없습니까? 그들의 상태를 덤프하십시오. 동일한 위치에서 동일한 잠금/차단을 모두 기다리고 있는지 분석합니다. –

3

처리되지 않은 예외가있는 것 같습니다.

우선 스레드 활동을 모두 기록해야합니다 (이 작업을 수행하려면 log4j을 사용할 수 있습니다).

ThreadGroup 클래스의 uncaughtException 메소드를 대체하고 catch되지 않은 예외로 인해 스레드가 중지되는 경우에 대한 경고를 작성할 수도 있습니다.

관련 문제