2012-01-02 12 views
2

내 작업 중 하나가 너무 많은 메모리를 먹어서 OutOfMemoryError 예외로 인해 실패했습니다. 그 예외를 잡을 수 있습니까? 에 메모리가 부족하면 경고 메시지를받을 수 있습니까?App Engine에서 OutOfMemory 예외 처리

+0

저는 개인적으로 살펴 보지 않았습니다. 하지만 백엔드 인스턴스를 조사하는 것이 좋습니다. 기본 프런트 엔드보다 많은 메모리에 액세스 할 수 있습니다. 이것은 물론 메모리를 절약하기 위해 구현할 수있는 몇 가지 분명한 변경 사항이 없다고 가정합니다. http://code.google.com/appengine/docs/java/backends/overview.html – Dave

+0

가능한 [Catching java.lang.OutOfMemoryError?] 복제본 (http://stackoverflow.com/questions/2679330/catching-java) -lang-outofmemoryerror) – Raedwald

답변

2

OutOfMemoryError를 잡을 수 있습니다. 그러나 권장하지 않습니다.

오류가 발생하는 이유는 여러 가지가 있습니다. 가장 확실한 것은 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/OutOfMemoryError.html입니다. 또한 GC 시간의 98 %가 힙 등의 2 % 미만을 줄이는 데 사용되는 것과 같은 이유가 있습니다.

OutOfMemoryError 전의 콜백은 없습니다.

+0

나는 그것을 포착하고 AppEngine에게 포기하라고 말하고 싶습니다. AppEngine은 어떤 이유로 든 실패한 작업을 다시 시작하므로 작업에서 OutOfMemoryError가 발생하면 다시 시작되고 다시 메모리가 부족하여 많은 비용이 들게됩니다. 그 것이 예외의 "권장"캐치에 해당한다고 생각하십니까? –

+0

아, 그러면 할 수 있어요. 내가 말했듯이, 당신은 확실히 그것을 잡을 수 있습니다. 계속해서 catch (OutOfMemoryError e)를 추가하십시오. 비용이 많이 드는 다른 것들이 있다면 Throwable을 잡을 수도 있습니다. 그러나 일단 catch하면 앱 엔진을 중지하지 않으면 컨트롤이 다른 예외 캐치와 동일하므로 컨트롤이 계속됩니다. – Pavan