2017-12-07 21 views
0

Java 응용 프로그램을 실행중인 Linux 컴퓨터가 있습니다. 나는 이러한 매개 변수를 사용하여 jvm을 실행 중입니다. -Xmx27231m -Xms27231mJVM maxHeapSize 및 InitialHeapSize가 htop에 반영되지 않습니다.

그러나 htop/top을 볼 때. 전반적인 시스템 및 프로세스에서 구체적으로 볼 수있는 것은 jvm이 실제로 27GB의 힙을 예약하지 않는다는 것입니다. 내가 대신 참조입니다 VIRT : 32.8G RES : 15.3G SHR : 16,536 내 모든 다른 자극/품질 보증/dev에 기계에서

는 RES가 힙로 정확한 금액 (어쩌면 조금 더) 반영 size JVM에 나를 예약 해달라고 요청하고 있습니다. 그러나 한 특정 시스템의 경우에는 그렇지 않습니다. 왜 이런 일이 일어나고 있는지 알 수 없습니다.

Java Mission Control을 해당 프로세스에 연결했는데 InitialHeapSize 및 MaxHeapSize가 실제로 올바른 값을 갖지만 유형은 CommandLine이 아니라 인체 공학적으로 표시됩니다. 그게 무슨 뜻인지 정말 모르겠다.

누구나? 감사합니다.

+0

메모리를 할당했지만 사용하지 않는 경우, 특히 메모리 경합이있는 경우 해당 메모리가 모두 상주 할 필요는 없습니다. 'Virt : 32.8G'는 메모리가 모두 있다는 것을 나타냅니다. 모든 메모리가 스왑되지는 않습니다. –

+0

스왑 된 것을 의미합니까? 내가 가지고있는 모든 머신에서, 내가 힙에 대해 설정 한 메모리의 양은 RES가 얼마나 많이 나타나는지입니다. 나는이 기계를 사용하고 있습니다. 많은 할당이 있습니다. –

+0

RES는 "거주자"입니다. 메모리 경합이 있으면 현재 액세스하지 않는 메모리 중 일부를 디스크로 스왑 할 수 있습니다. 이것은 스왑 공간의 전체 지점입니다. 그 시스템에서 다른 무엇이 실행되고 있습니까? 그 외에는 메모리 집약적 인 것이 있습니까? –

답변

3

JVM은 시작 시간을 줄이기 위해 미리 페이지를 미리 터치하지 않습니다. 그러나 강제로이 옵션을 사용할 수 있습니다.

-XX:+AlwaysPreTouch -Xmx27g -Xms27g 

은 BTW이가 (JVM이 거의이 AFAIK하지 않습니다하지만)를 사용하지 않을 경우 JVM은 OS에 다시 메모리를 해제 방지하지 않으며 교환 방지하기 위해 메인 메모리에 힙을 잠급니다.

그러나 특정 컴퓨터의 경우에는 그렇지 않습니다.

대부분의 경우 메모리를 느리게 사용할 수있는 적절한 활동이 없었습니다.