간혹 2 일에 한 번에서 2 주에 한 번 사이에 응용 프로그램이 임의의 위치에서 코드 : java.lang.OutOfMemoryError: GC overhead limit exceeded
과 같이 충돌하는 경우가 있습니다. 내 응용 프로그램이 분명히 가비지 컬렉션의 전체 시간의 98 %를 지출 하더군요"java.lang.OutOfMemoryError : GC 오버 헤드 한도 초과"의 과도한 GC 시간 지속
The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.
가의 2 %를 회복 :이 오류를 구글하면 나는 this SO question에 와서 그 expains this piece of sun documentation에 저를 이끌어 더미.
몇시에 98 %? 응용 프로그램이 실행되는 전체 2 주 중 98 % 마지막 밀리 초의 98 %?
나는 단지 -XX:-UseGCOverheadLimit
을 사용하는 것보다는이 문제를 실제로 해결하는 최선의 방법을 결정하려고 노력하고 있지만, 나는 해결해야 할 문제를 더 잘 이해할 필요가 있다고 생각한다.
문서에서 보면 2 주 전체의 98 % 인 것으로 보입니다. GC 로그에 -verbose : gc -XX : + PrintGCDetails XX : + PrintGCTimeStamps -Xloggc : PATH_FROM_ROOT/gclog.log 플래그를 설정 했습니까? 앱 실행 시간과 GC로 인해 중단 된 시간을 확인하는 것이 좋습니다. – JoseK
GC 로깅은 좋은 제안입니다. 2 주 중 98 %는 불가능할 것 같지만 당신이 맞습니다. 그것이 바로 문서가 의미하는 것입니다. 나는 그것이 부정확 한 글을 쓰기를 희망한다. –
98 %의 의미를 알았습니까? 내 생각에 GC는 2 주 동안 예외가 발생한 바로 그 순간에 애플리케이션 사용량의 98 %를 차지하는 것이 바쁠 것입니다. –