在一个新的虚拟机上,top 显示我的一个进程消耗了 100 GB 的虚拟内存。我读过这是可能的,因为 overcommit,但是,这有点太多了。我从未见过这样的事情,尤其是在只有 6 GB 实内存、2 GB 交换和单个 40 GB 高清分区的 VM 中。
具有 101 GB VIRT 的有趣过程是 Eclipse IDE(几分钟前开始),还有另一个是具有 98 GB VIRT 的 WebKitWebProcess。所有其他进程都具有大约 1-2 GB 的合理 VIRT 值。所有三个工具似乎都同意这一点:top,htop和ps。
详细信息:
Linux 4.15.0-38-generic x86_64 GNU/Linux,Linux Mint 19 Tara
Java HotSpot(TM) 64 位服务器 VM(构建 25.191-b12,混合模式)
版本:2018-09 (4.9.0) 构建 ID : 20180917-1800
/proc//maps 的内容以
00400000-00401000 r-xp 00000000 08:01 132092 /usr/lib/jvm/java-8-oracle/jre/bin/java
00600000-00601000 r--p 00000000 08:01 132092 /usr/lib/jvm/java-8-oracle/jre/bin/java
00601000-00602000 rw-p 00001000 08:01 132092 /usr/lib/jvm/java-8-oracle/jre/bin/java
014fc000-02ebe000 rw-p 00000000 00:00 0 [heap]
c0000000-d0000000 rw-p 00000000 00:00 0
d0000000-100000000 ---p 00000000 00:00 0
100000000-1012c6000 rw-p 00000000 00:00 0
1012c6000-140000000 ---p 00000000 00:00 0
7ef800000000-7ef800004000 rw-p 00000000 00:00 0
7ef800004000-7ef8000ec000 rw-p 00000000 00:00 0
7ef8000ec000-7ef800100000 rw-p 00000000 00:00 0
7ef800100000-7f0800000000 rw-p 00000000 00:00 0
7f0800000000-7f1000000000 ---p 00000000 00:00 0
Run Code Online (Sandbox Code Playgroud)
显示的最后两条线似乎是罪魁祸首0x7f0800000000 - 0x7ef800100000 ? 68.7e9。据我所知,这是一个没有权限的未映射私有区域。这就是我能说的......
小智 6
很可能它正在映射它可以索引的每个文件。我见过类似的 Kafka 映射数千个文件,但通常虚拟足迹要高得多(~10 倍)。你可以运行:
cat /proc/{PID}/maps
Run Code Online (Sandbox Code Playgroud)
(其中 {PID} 是您的 Eclipse 进程 ID)以查看是否是这种情况。如果情况确实如此,你可能需要调高vm.max_map_count的sysctl,如果你的虚拟占用过大。