gpt4 book ai didi

linux - free如何计算已用内存?

转载 作者:可可西里 更新时间:2023-11-01 11:44:57 25 4
gpt4 key购买 nike

free 如何计算已用内存,为什么它与/proc 报告的不同?

# cat /proc/*/status | grep VmSize | awk '{sum += $2} END {print sum}'
281260

但是免费说:

# free
total used free shared buffers cached
Mem: 524288 326488 197800 0 0 0

谁是对的?内存是281260kb还是326488kb?

最佳答案

题目问:“free如何计算已用内存?”

答案:它询问操作系统,操作系统必须跟踪它才能完成它的工作。

更具体地说,它询问内存管理子系统。正如 sheepsimulator 在评论中指出的那样,Linux 内核在 /proc 虚拟文件系统中公开了各种操作系统维护的数据,但是每个完整的服务操作系统都必须跟踪它们的数据,所以它很小重要的是提供一个 API 供免费使用。

问题是:“为什么这与将所有进程报告的 VmSize 相加不同?”

答案:至少这里发生了一些事情

  1. Linux 将 promise 为程序分配内存而不实际分配它。当您执行 char *p=new(1024*1024*1024*sizeof(char)); 时,内核不会立即为您提供千兆字节。它只是说“好的”,并认为当您开始使用它时它会捕获它。因此需要臭名昭著的OOM killer .
  2. 动态库是共享的,单页实内存可以映射到多个进程的虚拟地址空间。

此外,您对 proc 文件系统的传递不是原子的。

结果是 free 的输出更准确地反射(reflect)了给定时刻计算机上物理内存的使用情况。

关于linux - free如何计算已用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com