Java 프로세스에서 보고한 RES 메모리가 VIRT 메모리보다 높은 이유는 무엇입니까?

Java 프로세스에서 보고한 RES 메모리가 VIRT 메모리보다 높은 이유는 무엇입니까?

저는 TOP를 사용하여 Java 프로세스(Oracle Weblogic)를 모니터링해 왔으며 때때로 다음과 같은 일이 발생하는 것을 관찰했습니다.

  • 한 시간 정도 지나면 RES는 일반적인 2,097,152KB에서 거의 10GB로 증가한 다음 0으로 떨어졌다가 2,097,152KB로 돌아갑니다.
  • 이 기간 동안 VIRT 메모리는 6,904,832KB로 유지되었습니다.
  • %MEM은 RES가 증가하면 증가하고 RES가 감소하면 계속 증가합니다(시스템에는 32GB RAM이 있음).

나는 RES, VIRT 및 %MEM에 대한 많은 설명을 읽었습니다.남성상의, 그중 어느 것에도 적합하지 않습니다. 특히 RES와 %MEM은 완벽하게 상관관계가 있어야 하며 RES는 결코 VIRT보다 높을 수 없다고 생각합니다.

무슨 일인지 설명해 줄 수 있는 사람 있나요?

시간이 지남에 따라 동작을 보여주는 그림을 아래에 추가했습니다.

관련된 것은 이것이 로드 밸런싱 시스템의 한 노드이고 다른 노드는 아무 일도 일어나지 않은 것처럼 계속된다는 것입니다. 저는 이런 일이 다른 날에 한 노드에서 6번 발생하는 것을 보았습니다. RES가 떨어지면 최종 사용자 응답 시간에 작고 짧은 스파이크가 발생합니다. 두 노드는 동일에 매우 가깝습니다. 관리자는 Java 프로세스에 다양한 메모리 플래그를 설정했습니다. Verbose GC가 켜져 있으며 다음 기간 동안 전체 GC가 발생하지 않습니다.

시간이 지남에 따라 비정상적인 메모리 사용량이 발생합니다.

관련 정보