free和top显示可用内存不一致
free可用内存偏少
是top相对free没有统计Slab。这也是导致两者差别的主要原因。
可以使用 cat /proc/meminfo
看到内存的更具体的使用情况
以MB为单位显示
cat /proc/meminfo | awk '{print $1,$2/1024" MB"}'|column -t
以GB为单位显示
cat /proc/meminfo | awk '{print $1,$2/(1024*1024)" GB"}'|column -t
free和top显示可用内存不一致_寒夜-CSDN博客_free内存和top不一样
[root@localhost perf5.0]# free -g
total used free shared buff/cache available
Mem: 125 121 0 2 3 0
Swap: 3 3 0
-s 1 每隔一秒输出一次内存使用情况
-hs 1 每隔一秒友好输出一次
- total 内存总量,我的是2G内存
- used 已经使用的内存
- free 空闲的内存(对于系统而言,buff/cache属于已经被使用的内存空间)
- shared 当前已经废弃不用的内存
- buff/cache 磁盘缓存(当程序使用内存时,会使用这个内存空间)
- available 可用缓存,理论上等于free + buff/cache
磁盘缓存区buff/cache
buffer用来作对io设备写缓存
cache用来作对io设备读缓存
不过现在两者已经写在一起了,统称为程序读写文件的缓存区
实现原理
扇区是设备的最小寻址单元,也叫硬扇区或设备块。
块是操作系统中文件系统的最小寻址单元,也叫“文件块”或"I/O块"
每个块包含一个或多个扇区,但大小不能超过一个页面,一个页可以容纳一个或多个内存中的块。
当一个块被调入内存中时,它要存储在一个缓冲区中,每个缓冲区和一个块对应。
buff/cache 只有块的概念,没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。
Linux的free以及内存释放_黑喵警长的博客-CSDN博客_free释放内存
windows系统的内存是程序运行过程中需要使用才会用到,不用时空闲着。所以当内存使用率过高时,需要检查是否超负载运行。解决方法是停止掉一些进程。
linux系统中,是进程优先使用内存,而不是磁盘。这样会加快读取速度。当有新的进程启动时,再从内存中开辟出一定空间,为新的进程所用。即使进程退出,也不会立刻从内存中清理掉,这样可以加快下次启动进程的速度。所以内存一直是使用率很高的。这是linux系统的独特之处,初使用linux系统的同学需要转换一些思维。不用为linux的内存使用率高而担心。
在图1中,第三行反映出真实内存使用率为12.5%
再介绍一个linux查看内存的命令,free
free命令可以显示当前系统为使用和以使用的内存情况,还可以显示被内存使用的内存缓冲区。[root@vm10-0-0-3 dir]# free
total used free shared buffers cached
Mem: 8191064 8063080 127984 748 245932 6791544
-/+ buffers/cache: 1025604 7165460
Swap: 0 0 0
free命令默认以K单位来显示内存使用情况
Mem行显示数据
total:总内存大小
used:已使用内存大小
free:当前空闲内存大小
shared:多个进程共享的内存总额
buffers/cached:缓存内存数据
-/+ buffers/cache行数据显示
这一行的数据代表应用内存使用情况,可理解为真实内存使用情况。如图1中第三行数据。
used:当前(真实)使用内存总数
free:当前(真实)空闲内存总数
-/+ buffers/cache: 1025604 7165460可理解为当前已经使用的内存为1/8,计算公式used/(used+free)。也就是12.6%左右。
Swap代表交换分区,不做过多详解
free常用参数:
free -b #以Byte为单位显示内存使用情况
free -k #以KB为单位显示内存使用情况,也是默认参数
free -m #以MB为单位显示内存使用情况
free -g #以GB为单位显示内存使用情况
free -o #不显示应用(真实)内存使用情况列,不推荐
free -s #间隔数字秒数刷新显示内存使用情况
free -t #显示内存总和列
free -V #显示当前版本
释放内存
/proc/sys/vm/drop_caches默认是0
# echo 1 > /proc/sys/vm/drop_caches; free pagecache, use
# echo 2 > /proc/sys/vm/drop_caches; free dentries and inodes
# echo 3 > /proc/sys/vm/drop_caches; free pagecache, dentries and inodes
1:to free pagecache
2:to free dentries and inode
3:to free 1&2
echo 1是释放页缓存,echo 2 是释放slab,而echo 3就是既释放页缓存,又释放slab。
注