Java 프로세스는 전체 RAM보다 더 많은 RAM을 소비합니다.

Java 프로세스는 전체 RAM보다 더 많은 RAM을 소비합니다.

Java 프로세스가 포함된 도커 컨테이너가 있는 서버가 있습니다. 프로세스 중 하나가 100%(117%) 이상의 메모리를 소비하며 이는 top 명령에 표시됩니다.

$ top
...
MiB Mem : 515396.0 total, 149379.3 free, 135893.8 used, 230123.0 buff/cache
Mib Swap: 32768.0 total,   32768.0 free,      0.0 used. 171544.5 avail Mem
...
    PID USER PR NI    VIRT    RES    SHR S %CPU  %MEM    TIME+ COMMAND
3103558 root 20  0 9449.8g 590.5g 588.0g S 28.1 117.3 21786:42 java

ps aux 명령을 사용하여 교차 확인했는데 RSS 및 VSS 값이 훨씬 더 높습니다.

$ ps aux | grep 3103558
root 3103558 26.3 99.9 9908790360 619223404 ? Sl  Sep29 21788:59 java ... -Xms196G ...

free -g는 메모리를 덜 사용합니다.

$ free -g
          total     used    free    shared  buff/cache  available
Mem:        503      132     145       200         224        167
Swap:        31        0      31 

jconsole을 확인해 보니 java_opts에 지정된 최대 힙 값(10,926,161,920바이트)으로 메모리가 제어됩니다.

일부 프로세스가 메모리를 100% 이상 소비하는 이유를 누군가 말해 줄 수 있습니까? 당황해야 합니까, 아니면 이것이 예상되는 상황입니까?

관련 정보