Google Appengine 애플리케이션의 백엔드 인스턴스에서 긴 태스크 (약 6 시간)가 실행 중입니다. 여기 Java GAE : 백엔드가 너무 오래 종료되어 프로세스가 종료되었습니다.
백엔드 구성입니다 : 프로세스가 실행되면<backend name="backend_1">
<class>B4_1G</class>
<options>
<public>true</public>
<dynamic>false</dynamic>
</options>
</backend>
내가
2013-09-13 18:52:14.677
Process terminated because the backend took too long to shutdown.
I를 얻을 임의의 시간 후에 내가 시간 (기본 스레드 또는 병렬 스레드에서, 나는 모두를 시도) 해결책을 찾기 위해 둘러 보았습니다. 제가 구현 한 shutdown Hook for Backend instance에 대해 읽었지 만 작동하지 않는 것 같습니다. 로그 메시지가 표시되지 않습니다
LifecycleManager.getInstance().setShutdownHook(new ShutdownHook()
{
public void shutdown()
{
log().info("Shutting down...");
LifecycleManager.getInstance().interruptAllRequests();
}
});
, 나는 또한 isShuttingDown을 구현
에만 Process terminated because...
메시지가 내 프로세스의 모든 사이클에서
LifecycleManager.getInstance().isShuttingDown();
을 확인
, 내가 확인 먼저는 경우입니다 백엔드가 종료되지만이 플래그는 절대로 사실이 아닙니다.과정은 내가 "밖으로 메모리의"오류에 대해 생각
(어쩌면 내가 작업이 재개 미래에 대한 몇 가지 데이터를 저장 중지 할 수 있습니다)하지만 난 항상 "잔인"종료를 제어 할 수있는 후크없이 중단 메모리에 "큰"객체를 저장하지 않습니다. 또한 매주기마다 인스턴스 변수가 NULL로 설정되어 메모리를 강제로 릴리스합니다. 이
내가 이런 종류의 문제가 발생 뿐이야 문제의 경우또한, 나는이
Uncaught exception from servlet java.lang.OutOfMemoryError: Java heap space
과 같은 오류를 기대하고있어?
이미 this article을 읽을 수 있지만 솔루션