스레드 수는 최대 IMO, 아마도 너무 많은입니다 1000
합니다. 각 스레드의 스택은 플랫폼 및 -Xss
에 따라 최대 1Mb (또는 그 이상)를 차지할 수 있습니다.
분당 400MB의 할당/할당 해제를 고려하면 Java 응용 프로그램에서 괜찮습니까?
문제가되지 않습니다. 실제로 성능 그래프를 보면 GC는 사용 된 CPU 시간의 작은 부분처럼 보입니다 ... 은 사용할 수있는 것의 작은 부분입니다.
질문을하는 이유 - 사용 가능한 메모리의 양이 시간이 지남에 따라 이하가 : 일부 메모리 누수 (하루에 몇 메가)가,
그럼 당신은 추적 고정 고려해야한다 그 누출들.
... 또한 사용되는 메모리 양은 수행 할 작업량에 따라 다릅니다 (앱은 일부 항목을 캐시합니다).
그 해답은 힙 크기를 늘리는 것일 수 있습니다. 그리고 (놀랍게도) 힙 크기를 늘리면 쓰레기 수거 시간을 줄일 수 있습니다. (동시 수집에 문제가 정말 큰 힙 ...있을 수 있지만)
그래서 사용 가능한 메모리의 < = 100 메가와 상황이있을 수 있습니다. GC는 그 활동이 매우 요구되기 때문에 당연히 미친 듯합니다.
예. 이것은 높은 할당 비율보다는 저장소 누수의 결과 일 가능성이 큽니다. JVM이 힙 (Heap) 부족으로 점점 더 가까워지면서 GC는 전체 실행 시간 중 점차 증가하는 비율을 차지합니다. 피할 수없는 일입니다. GC는 쓰레기가 아닌 객체를 처리하는 데 대부분의 시간을 소비하지만 재생 가능 공간의 비율이 낮아지면 해당 공간을 회수하는 비용이 높아집니다.
-XX:+UseGCOverheadLimit
JVM 스위치. 이것은 "OutOfMemory 오류가 발생하기 전에 GC에서 소비 된 VM 시간의 비율을 제한하는 정책을 사용합니다.". 기본적으로, 그것은 피할 수없는 오세요는 서버가 이제까지 감소 성능의 죽음의 소용돌이로 전환 전에 을 ... 발생되는 원인이
는
(다시 시작하는 것이 좋습니다 실행 시간은 생산의 달) ... 또는 메모리 누수를 수정하십시오!