【linux】free和top显示可用内存不一致|free显示内存90%但是top却看不到谁用

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。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值