Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux“;免费-m";:总内存、已用内存和可用内存值不';不算_Linux_Memory_Free Command - Fatal编程技术网

Linux“;免费-m";:总内存、已用内存和可用内存值不';不算

Linux“;免费-m";:总内存、已用内存和可用内存值不';不算,linux,memory,free-command,Linux,Memory,Free Command,在linux系统上,使用“free”时,以下是值: total used free shared buff/cache available Mem: 26755612 873224 389320 286944 25493068 25311948 Swap: 0 0 0 总值、已用值和自由值不相加。我希望总数=使用+免费 问题: 这里我遗漏了什么?对于主内存,内存的实际

在linux系统上,使用“free”时,以下是值:

         total      used      free    shared  buff/cache   available
Mem:  26755612    873224    389320    286944    25493068    25311948
Swap:        0         0         0
总值、已用值和自由值不相加。我希望总数=使用+免费

问题:
这里我遗漏了什么?

对于主内存,内存的实际大小可以计算为
已使用+空闲+缓冲+缓存
已使用+空闲+缓冲/缓存
,因为
缓冲/缓存=缓冲+缓存

free
的手册页突出显示了
已使用的
作为
已使用的内存(按总计-可用-缓冲-缓存计算)

正如free的手册页所说:-

total总安装内存(MemTotal和SwapTotal在/proc/meminfo中)

已用已用内存(按总-可用-缓冲-缓存计算)

释放未使用的内存(在/proc/meminfo中使用MemFree和SwapFree)

共享的tmpfs(在/proc/meminfo中的Shmem, 在内核2.6.32上,如果不可用,则显示为零)

缓冲区内核缓冲区使用的内存(在/proc/meminfo中的缓冲区)

缓存页面缓存和板使用的内存(缓存和板在 /proc/meminfo)

缓冲区/缓存缓冲区和缓存的总和

可用在不交换的情况下,估计有多少内存可用于启动新应用程序。与“缓存”或“可用”字段提供的数据不同,此字段考虑了页面缓存,并且由于项目正在使用,并非所有可回收的内存板都将被回收(MemAvailable in/proc/meminfo,在内核3.14上可用,在内核2.6.27+上模拟,否则与“可用”相同)

就你而言


873224(已使用)+389320(免费)+25493068(缓冲/缓存)=26755612(总计)


Linux喜欢缓存它打开的每个文件。每次打开一个文件进行读取时,Linux都会对其进行缓存,但如果它需要内存来完成更重要的事情,比如当系统上的某个进程需要分配更多内存时,它会删除这些缓存。当重复使用相同的文件时,内存中的这些缓存只会使Linux更快。它不是每次想读取文件时都去磁盘,而是从内存中获取文件,内存比磁盘快得多。这就是为什么您的系统显示25493068用于buff/cache,但也显示25311948可用。如果系统需要,大部分缓存数据都可以释放。

@buttifulbuttfly到目前为止,我的理解是buff/cache是total的一个子集。同意Andreas的观点。我的理解是一样的@但是如果缺少什么,请加上蝴蝶。我有一个tomcat服务器在这台机器上运行。如果需要,它会从buff/cache中提取内存吗?thx@MichaelMassey那是什么Linux发行版/版本/硬件?@shekharsuman Mine没有;-)(Ubuntu14.04 LTS)-这就是我要求发行的原因。您使用的是哪种Linux系统?底线:free的输出最近发生了变化:。另见感谢@GeorgeB。它消除了我的疑虑。它看起来像是Available=免费使用+共享+Buff/缓存,所以我不理解它背后的逻辑。为什么可用的不只是总数减去Used@NadavB-为此,您需要深入研究tmpfs文件系统、缓冲区和缓存。用几句话回答你的问题并不是那么简单!可用不是简单的免费使用+共享+缓冲/缓存。它只包括“缓存”的一部分,因为由于各种原因,并非所有缓存都可以回收。这也只是一个估计,因为它试图表示在不交换的情况下可以分配多少内存,但这并不容易预测,因为交换算法非常复杂/模糊。