free命令
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存及被内核使用的buffer。
命令参数
-b, --bytes 显示字节数
-k, --kilo 显示千字节数
-m, --mega 显示兆字节数
-g, --giga 显示千兆字节数
--tera 显示百万兆字节数
-h, --human 以人们可读方式显示
--si 权使用1000不使用1024
-l, --lohi 显示详细的高低内存统计
-o, --old 使用旧模式显示(没有-/+buffers/cache行)
-t, --total 显示RAM+swap总内存
-s N, --seconds N每隔N秒输出一次
-c N, --count N重复输出N次后,退出
--help 列出帮助 信息后退出
-V, --version 输出版本信息和退出
命令输出
free -k 以千字节数输出结果
total used free shared buffers cached
Mem: 1024048 942868 81180 14576 16776 247588
-/+ buffers/cache: 678504 345544
Swap: 1045500 95220 950280
第一行:
total 总内存数量 used 使用的内存数量 free 未使用的内存数量 shared 多进程共享内存数量 buffers cached为磁盘缓存的数量。
而buffers和cached的区别是:
buffer:缓存着文件结点之类的信息
cache:缓存着读写过的文件内容信息
第二行:
Mem表示显示的是实际物理内存。
1024048=942868+81180(total=used+free)
第三行:
当缺少内存时,内核会释放buffers和cached的部分页面。所以这一行显示的
used=第一行used-第一行buffers-第一行cached。(678504=942868-16776-247588)
free=第一行free+第一行buffers+第一行cached。(345544=81180+16776+247588)
第四行:
swap表示的是swap内存。
命令实现
free命令主要输出关于内存的信息。而内存信息可以通过两种方式获取。
sysinfo系统调用
struct sysinfo {
long uptime;
unsigned long loads[3];
unsigned long totalram; /*总内存大小*/
unsigned long freeram; /*空闲内存大小*/
unsigned long sharedram; /*共享内存大小*/
unsigned long bufferram; /*缓存内存大小*/
unsigned long totalswap; /*交换空间内存大小*/
unsigned long freeswap; /*交换空间空闲内存大小*/
unsigned short procs;
unsigned long totalhigh;
unsigned long freehigh;
unsigned int mem_unit;
char _f[20-2*sizeof(long)-sizeof(int)];
};
#include <sys/sysinfo.h>
int sysinfo(struct sysinfo *info);
但sysinfo系统调用只能获取部分内存信息。获取所有内存信息需要读取/proc/meminfo文件。
/proc/meminfo文件
/proc/meminfo文件包含了所有内存相关信息。读取该文件可以获取这些信息。
free命令通过读取/proc/meminfo文件来获取内存信息并输出。