메모리 할당 질문이 있습니다. 우리는 몇 가지 서비스를 가장 먼저 분석했으며, RES 값이 약 1.8GB임을 알았습니다.이 값은 당시 1.8GB의 메모리를 보유하고 있음을 의미합니다. 우리가 방금 시작했으면 (캐시에서 읽고, 처리하고, 다른 캐시로 푸시), CPU 집약적 인 처리가 완료된 후에도 계속 볼 수 있습니다. 우리가 예상 한대로 뭔가가 GC되지 않았 음을 의미합니다.사용 된 %와 비교하여 예상치 않게 큰 힙 크기
우리는 다음과 같은 매개 변수를 사용하여 프로그램을 실행 : -Xms256m 내가 이해 내가 이 기대 이제 어떻게 256의 초기 힙 크기, 3096.
의 최대 힙 크기를 의미 -Xmx3096m은 처음에는 필요에 따라 힙이 커지며, 메모리가 할당 해제되면 필요에 따라 축소됩니다 (이것은 내 첫 실수 일 수 있음). 그래서 사용되는 힙에 극적으로 떨어, 우리가 처리를 완료했습니다 사용 힙 1GB의 힙 2GB 크기
- 3 분 : 우리가 실제로 jvisualvm 함께 참조하면 다음과 같다 충분히 제로 약 1.5GB
- 7 분에 그러나 단지 방울 힙 사이즈 근처 -> 오직 1백-2백메가바이트 정도 사이 힙 사용 처리 주기적 실시간 작은 비트, 힙 사이즈는 역시 일정하게 남아 약 1.7GB.
제 질문은 왜 내 힙이 줄어들지 않았을까요? 이 프로세스가 귀중한 메모리의 리눅스 박스에서 다른 프로세스를 강탈하는 것이 아닌가? 그렇다면 어떻게 해결할 수 있을까? 우리는 가끔 메모리 부족 오류를보고, 이러한 프로세스가 가장 '예기치 않은'메모리 크기를 할당 받으면서 나는 그들과 함께 시작하는 것이 가장 좋을 것이라고 생각했습니다.
건배, 데이브.
(~ JVM 메모리 조정에 대한 이해의 결여 실례!)
아마도 상자에 좀 더 교환을 할당하십시오. 이 페이지들 중 많은 수가 사용되지 않아서 쓰레기를 버리지 않고 커널에 의해 페이징 될 수 있습니다. 다른 프로세스는 상주 메모리에 잘 맞아야합니다. – wds