查看Linux服务器下的内存使用情况,可以使用命令free -m
[root@localhost ~]$ free // 以KB为单位显示内存使用情况
[root@localhost ~]$ free -m // 以MB为单位显示内存使用情况
[root@localhost ~]$ free -g // 以GB为单位显示内存使用情况
free -m
total used free shared buffers cached
Mem: 48211 18670 29541 0 798 15510
-/+ buffers/cache: 2361 45850
Swap: 3999 0 3999
//Mem:物理内存使用情况
//swap:交换分区情况
//+buffers/cache:(可用)的内存数,即free+buffers+cached
//-buffers/cache:(已用)的内存数,即used-buffers-cached
//total:物理内存总大小 当前49GB
//used:已经使用的物理内存大小 当前19GB
//free:空闲的物理内存大小 当前46G
//shared:多个进程共享的物理内存大小
//buffers Buffer:缓存内存数 当前798MB
//cached Page:缓存内存数 当前16GB
可用内存的计算公式为:
可用内存=free+buffers+cached
即29541MB+798MB+15510MB=45849MB
其中,内存总数与已使用内存数和空闲内存数的关系是:
total(49GB)=used(19G)+free(30G)
在第二部分内容(-/+buffers/cache)中各参数如下所示。
(-buffers/cache):已用的used内存数,即2.361G(指的是第一部分Mem行中的used-buffers-cached)。 (18670-798-15510)
(+buffers/cache):可用的free内存数,即45850G(指的是第一部分Mem行中的free+buffers+cached)。
可见-buffers/cache反映的是被程序实实在在用掉的内存,而+buffers/cache反映的是可以用的内存总数。
centos7 free -h命令
[root@localhost ~]$ free -h // 自动转换单位显示内存使用情况(centos7才有)
输出结果:
[root@MongoDB ~]# free -h
total used free shared buff/cache available
Mem: 652M 169M 222M 5.6M 261M 350M
Swap: 4.0G 0B 4.0G
// Mem:物理内存的使用情况
// Swap:交换分区的使用情况
// total 总物理内存大小
// used 已经使用的物理内存大小
// free:空闲的物理内存大小
// shared:多个进程共享的物理内存大小
// buff/cache:用做缓冲/缓存的物理内存大小
// available:还可用的物理内存大小
// total 总内存 = used + free + buff/cache
// available 还能用的内存 = free + buff/cache
// 如果使用到交换分区,则表明物理内存不够或内存泄漏了
// 关于 buffer 和 cache:
// 我们的数据是存放在磁盘上的,数据是交给CPU进行处理的,但磁盘的运转速度很快,CPU的运转速度很慢,不可能直接把磁盘的数据直接丢给CPU进行处理,因此要经过
// 一个中间层,即内存,我们把这部分内存称为缓存(cache);相反地,CPU把数据处理完了,要存放到磁盘中,也要经过内存这个中间层,这部分内存则称为缓冲(buffer)
// 因此,数据的流向不一样,内存的角色也不一样。系统会优先预留一部分内存给 buff/cache 使用,剩下的内存再留给系统或程序使用