free 命令是 Linux 上很简单、很常用的一个命令。
free 命令的输出会有 Swap 相关的内容,本文忽略 Swap。
free
free -k # 以KB为单位
free -m # 以MB为单位
free -g # 以GB为单位
free -h # 人类可读
使用 free 命令的时候,我们一般最关心的就是:现在还有多少内存可以让应用程序使用?
但是,旧版的 free 命令并不能直观地展示这一点。
totalusedfreesharedbufferscached
3856200
3321044
535156
251096
232084
1406376
-/+ buffers/cache
1682584
2173616
3999740
482480
3517260
-/+buffer/cache 这一行是从应用程序的角度看物理内存的使用量。
粗略地看,应用程序还可以继续使用的内存大小为:-/+buffer/cache 一行中的 free 减去 Mem 一行中的 shared。在这个例子中,为 2173616 - 251096 = 1922520。
其一:开始-所有程序-金蝶k3-添加或删除金蝶k3,执行删除命令即可。需要注意一点,这里提到的【命令删除】指的是delete命令,而不是【明细表删除】命令,通过以上介绍,我们也会发现,其实用【delete】是删除不了明细表的,那些用【delete】删除明细表操作而出现问题的同学,就不用再苦恼了。lastcomm命令的输出显示了用户wietese执行了哪些命令,每个命令消耗了多少cpu时间,以及什么时候命令开始执行。
totalusedfreesharedbuff/cacheavailable
现在只有 Mem 一行数据来描述内存的使用情况(Swap 一行暂时忽略),第一感觉就比旧版的输出好看很多。
1)内核内存:为netware内核专用,只要内核正在运行,其他进程不得占用。ecos能满足嵌入式linux难以满足的对嵌入空间的需求linux常用命令,linux内核最小约500kb,占用1.5mb内存,而ecos只占用几十到几百kb。在这里我们可以考虑一下两者的执行速率和内存空间分配的问题,由上面的例子我们可以很直白的看出linux常用命令,静态内存分配比动态内存分配的速率要高不少,但是我们也看到,静态内存分配的方式有可能会有内存剩余也就是有可能会有我们不使用的内存空间,这样就造成了内存的浪费。
free 命令输出的数据本质上是由 /proc/meminfo 下的统计数据。新版的内核优化了 /proc/meminfo 下的一些统计数据,使得 free 命令的输出更加准确、清晰。
这里要明确一点,大部分情况下,大部分 buffer/cache 占用的内存在需要时可以被回收并重新分配。但是要注意下面几点:
shared 属于 page cache,所以 cache 的统计里包括 shared,但是 shared 不能被内核随时回收。
除了 shared 以外,buffer 或 cache 对应的统计信息里,还有一部分被内核“真正”占用,这部分也不能被随时回收。
大部分内核的 free 命令还是输出旧的格式,此时我们只能根据输出简单估算出 available 的内存大小(见旧版输出的说明,实际 available 的内存应该比这里估算的值小)。
(2018.07.29 更新,新版 free 命令的输出说明。)