2011-08-09 2 views
2

ThreadPoolExecutor에 문제가 있습니다. 몇 시간 동안 제대로 작동하지만 때로는 (임의의 시간에, 때로는 2 분 또는 3 시간 후에) 제출 된 작업의 실행이 중지되고 프로그램이 중지됩니다.Java ThreadPoolExecutor가 잠시 후 작동을 멈 춥니 다

현재 큐가 가득 차고 모든 corethread가 활성화되어 있습니다.

나는 이것이 어디에서 왔는지 간단히 알 수 없습니다. 특히 모든 corethreads가 항상 작동하는 동안 그것은 때때로 3 시간 동안 작동하기 때문에.

나에게 제안이있는 사람이 있으면 매우 기쁠 것입니다.

+2

교착 상태입니다. 그럼 어떤 코드가 쓰레드간에 공유됩니까? 빨간 머리 디버깅 : 앱을 디버그 모드로 실행하고 잠글 때까지 기다린 다음 디버거와 연결하고 jvm을 일시 중단하면 모든 스레드가 어느 시점에 있는지 볼 수 있습니다. –

+0

교착 상태가 의심되면 모든 스레드의 스택 추적을 덤프하십시오. Windows에서는 Control-Break를 눌러 수행합니다. 스레드가 동기화 된 내용과 대기중인 내용을 확인하십시오. –

+0

반드시 교착 상태 일 필요는 없습니다. – erickson

답변

0

웹 페이지를 다운로드하는 I/O 작업을 수행하는 코드에서 비슷한 문제가있었습니다. 때로는 몇 분 또는 몇 시간 내에 스레드가 일부 I/O 작업을 중단하고 작동을 멈추는 경우가 있습니다.

이 경우 귀하의 경우, 낙태 시간을 설정하십시오.

디버거에서 코드를 실행하고 응용 프로그램이 중지되면 스레드가 실행 한 마지막 방법을 확인하십시오.

1

Take a look at the stack dump. 스레드가 차단 작동 중이거나 절대로 작동하지 않거나 실제로 교착 상태에 빠지기를 기다리는 경우이 메시지가 표시됩니다.

0

당신은 어딘가에 메모리 누수가 수 있으며, 그 몇 시간

관련 문제