表示完全看不懂, 所有的加起来恐怕也不超过 5G,但系统内存占用超过 12G (正常办公,开的网页比较多,无其他东西)
去看了一下,任务管理器“进程”页面里的“内存”对应的是“详细信息”页面里的“private working set”。
你看到内存占用小,但实际占用大,可能是因为程序实际使用的内存都在“shared working set”里。
比如 VMware 是使用 file mapping 申请的内存,就被算在“shared working set”里了。
(你要是觉得 windows 的这个难以看懂,那 Linux 这边会更让人吃惊,因为起码 windows 还能算准总的内存使用,linux 干脆连总总量都有多种不同口径)
前面说了,主要的问题在于多个进程之间可以有共享内存,这意味着计算的时候,有 3 种可能的思路,分别满足三种特性中的两个,即所谓不可能三角
(这 3 种算法就是所谓的 USS RSS PSS )
可以看出,并不存在一种完美的算法能准确衡量单个进程的内存使用。
而之所以说 Linux 这边更复杂,则是因为 Linux 默认启用了 overcommit 特性,加了个 VSS 指标,申请的内存可以大于实际使用的。这下好了,连找到总内存利用率都变成了不可能的任务。好多人在 Linux 下试图做 fallible allocator,实际根本没用,OOM 基本都是发生在访问内存而不是分配内存的时候。
如果你想“内存占用就非常清晰”的话,推荐去“详细信息”页面看“Working set”这一项,不过这一项是把 private 和 shared 算在一起的,会出现重复计算的问题。
至于“进程”页面里的“内存”,似乎没有提供选项设置为“Working set”。