在RedHat Linux 6.2上,我正在运行free -m,它显示几乎所有8GB使用的
total used free shared buffers cached
Mem: 7989 7734 254 0 28 7128
-/+ buffers/cache: 578 7411
Swap: 4150 0 4150
Run Code Online (Sandbox Code Playgroud)
但同时在top -M我看不到使用所有这些内存的任何进程:
top - 16:03:34 up 4:10, 2 users, load average: 0.08, 0.04, 0.01
Tasks: 169 total, 1 running, 163 sleeping, 5 stopped, 0 zombie
Cpu(s): 0.7%us, 0.3%sy, 0.0%ni, 98.6%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7989.539M total, 7721.570M used, 267.969M free, 28.633M buffers
Swap: 4150.992M total, 0.000k used, 4150.992M …Run Code Online (Sandbox Code Playgroud) 什么相当于FreeBSD v8.1上的Linux'免费'命令?
我从我的应用程序中调用"免费"并在我的应用程序的日志文件中报告结果.移植到FreeBSD v8.1时会有什么替代品?
以下是Linux上的"免费"示例:
[centos4x32 ~] free
total used free shared buffers cached
Mem: 774452 733044 41408 0 98040 328880
-/+ buffers/cache: 306124 468328
Swap: 2031608 224 2031384
Run Code Online (Sandbox Code Playgroud) 之前已经问过这个问题,但是不想再次更新同一个线程,因为它是一个旧线程.
想要从free命令输出中的"缓冲区"和"缓存"列中澄清自己.
这就是我的理解......
缓冲区是数据存储在内存中但尚未刷新到磁盘的东西.数据将由bdflush守护进程定期刷新到磁盘,或者我们可以通过运行sync命令手动执行.
另一方面,缓存是程序/数据,它被加载到内存中但保留在内存中,因此如果再次需要,它将很快可用.
为了理解缓冲区的概念,我尝试了以下实验......
这是free我桌面上的命令读取
[zama@localhost ~]$ free -m
total used free shared buffers cached
Mem: 2897 465 2431 0 30 230
-/+ buffers/cache: 204 2692
Swap: 4000 0 4000
[zama@localhost ~]$ sync
[zama@localhost ~]$ free -m
total used free shared buffers cached
Mem: 2897 466 2431 0 30 230
-/+ buffers/cache: 205 2691
Swap: 4000 0 4000
执行sync命令后,我无法看到缓冲区减少.
接下来我尝试了以下内容...试图将一个巨大的文件写入磁盘.
[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k
正如预期的那样,缓存的值应该增加并且free正在确认这一点.
@localhost …
我在linux主机上发出的free命令的输出如下:
free
total used free shared buff/cache available
Mem: 263846320 47746620 3290072 1140808 212809628 214382420
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这个可用部分指定的内容.尽管总内存很高并且使用的内存仅为18.09%,但可用内存的显示非常少,即大约1.24%.
free -h
total used free shared buff/cache available
Mem: 251G 45G 3.1G 1.1G 202G 204G
Swap: 0B 0B 0B
Run Code Online (Sandbox Code Playgroud)
这是否意味着我无法启动更多应用程序,因为可用内存非常少.使用的内存仅为18%.所以不应该释放82%而不是1.24%,因为命令显示在上面.
我很迷惑.有人可以帮忙吗?
在linux系统上,使用"free"时,以下是值:
total used free shared buff/cache available
Mem: 26755612 873224 389320 286944 25493068 25311948
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
总计,使用和免费值不相加.我期待总数=使用+免费.
问题: 我在这里错过了什么?
从free -m我可以看到机器上有377MB的内存和1649MB的空闲(其中1567是由ubuntu缓存的).请参阅下面的实际输出:
caz@riskvm:~$ free -m
total used free shared buffers cached
Mem: 2026 1975 51 0 30 1567
-/+ buffers/cache: 377 1649
Swap: 3153 87 3065
Run Code Online (Sandbox Code Playgroud)
但是当我查看top的输出时,我可以在RES列中看到使用1GB和273MB的进程.RES表示驻留在顶部手册页中的非交换物理内存中.
top - 11:45:26 up 1 day, 38 min, 3 users, load average: 0.27, 0.21, 0.23
Tasks: 125 total, 1 running, 123 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.2%us, 6.6%sy, 0.0%ni, 92.8%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2075560k total, 2023796k used, 51764k free, 31264k buffers
Swap: 3229024k total, 89764k used, …Run Code Online (Sandbox Code Playgroud) 我需要从输出中提取可用内存free,我想我会使用awk并想出类似的东西free | awk '{print $4}'.这给了我一个输出:
$ free | awk '{print $4}'
shared
365296
1273812
3931364
Run Code Online (Sandbox Code Playgroud)
请注意,共享的标题不是这些数字的标题,数字来自免费(/usr/bin/free在第一列中没有标题,因此免费的数字出现在第4列,其中标题报告来自第5列).但是,有这个,我怎么才返回第二行?我现在对其余的不感兴趣.
我编写了一个C程序,在其中我使用malloc连续分配内存(1 MB大小).我不释放这段记忆.当这个程序运行时,我调用linux free命令,并期望使用的内存应该逐渐增加,内存空闲应该减少.但这并不期望.Free命令输出几乎保持不变.知道为什么使用malloc分配的内存没有显示在使用的内存中?
只是寻找关于free -mLinux输出的一些快速帮助.这是我的一台服务器上的示例:
$free -m
total used free shared buffers cached
Mem: 14881 14813 68 0 262 883
-/+ buffers/cache: 13667 1213
Swap: 4095 240 3855
Run Code Online (Sandbox Code Playgroud)
我知道内核可以并将使用可用内存进行磁盘缓存来加速系统.
通常情况下,我会查看"免费"列中的第二个值,在上面的例子中它是1213.它通常比这要高很多.
我想我想了解' - /+ buffers/cache'旁边的两个输出是什么意思.从我所看到的,系统内存确实很低(只有1213MB可供应用程序使用),操作系统实际需要 13GB用于缓存?
我想做以下事情:
获取输出free -mo,取第二行并每30秒将其记录到一个文件中.
我跑的时候
$free -mo -s 30
Run Code Online (Sandbox Code Playgroud)
它每30秒运行并显示一次输出.
但是当我跑步的时候
$ free -mo -s 30 | head -2 | tail -1
Run Code Online (Sandbox Code Playgroud)
它只运行一次.我无法弄清楚出了什么问题.
free手册说free -s 30每隔30秒运行一次命令.
我需要对 Linux 进行一些研究。其中一个问题如下:
'在正在运行的系统上,空闲列中的命令 free 的输出是否可能与前 2 行相同?你怎么能强迫这个?
我查了一下,我相信我已经找到了这些值的含义。如果我将缓冲区和缓存添加在一起,并将其添加到 free 中,它就会为我提供缓冲区和缓存的 free 值。这意味着,如果需要的话,应用程序可以使用的内存。
因此,我认为这两行的值可能相同,这取决于使用情况。但是,我不知道我怎么能
free-command ×11
linux ×9
memory ×8
bash ×2
process ×2
awk ×1
caching ×1
freebsd ×1
heap-memory ×1
linux-kernel ×1
malloc ×1
porting ×1
redhat ×1
tail ×1
unix ×1