我有一个带有包含 java 进程的 docker 容器的服务器。其中一个进程消耗的内存超过 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%,我是否需要惊慌或者这是某种预期的情况?