内存查看命令
free
语法
free [options]
参数说明
-b, --bytes 显示内存的字节数 -k, --kilo 以千字节显示内存容量,这是默认的 -m, --mega 以兆字节显示内存容量 -g, --giga 以千兆字节显示内存容量 --tera 以tb显示内存容量 -h, --human 显示所有输出字段自动缩放到最短的三位数单位,并显示输出的单位。以下单位使用。 B = bytes K = kilos M = megas G = gigas T = teras -w, --wide 切换到宽模式。宽模式产生的长度超过80个字符。在这个模式下,缓冲和缓存分别被报告在两个独立的列中。 -c, --count count 显示结果计数时间。需要- s选项。 -l, --lohi 显示详细的低内存和高内存统计数据。 -s, --seconds seconds 连续显示结果延时秒。您可能实际上指定了任何延迟的浮点数,usleep(3)用于微秒的分辨率延迟次了。 --si 用1000而不是1024 -t, --total 显示列总数的一行。 --help 显示帮助信息 -V, --version 显示版本信息
数据从/proc/meminfo中获取
示例
[root@fox ~]# free -m total used free shared buff/cache available Mem: 992 66 760 0 165 781 Swap: 0 0 0
total
:总内存used
:程序已使用内存free
:空闲内存shard
:程序共享的内存空间buffer/cache
:buffer cache和page cache,被算在used中available
:系统可用内存
回收内存空间
清缓存的工作也并不是没有成本。理解cache是干什么的就可以明白清缓存必须保证cache中的数据跟对应文件中的数据一致,才能对cache进行释放。所以伴随着cache清除的行为的,一般都是系统IO飙高。因为内核要对比cache中的数据和对应硬盘文件上的数据是否一致,如果不致需要写回,之后才能回收。在手工回收内存前,最好同步一下数据。
sync echo 1 > /proc/sys/vm/drop_caches:表示清除 pagecache 。 sync echo 2 > /proc/sys/vm/drop_caches:表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。 slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 pagecache 。 sync echo 3 > /proc/sys/vm/drop_caches:表示清除 pagecache 和 slab 分配器中的缓存对象。
#!/bin/bash used=`free -m | awk 'NR==2' | awk '{print $3}'` free=`free -m | awk 'NR==2' | awk '{print $4}'` echo "===========================" >> /var/log/mem.log date >> /var/log/mem.log echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log if [ $free -le 100 ] ; then sync && echo 3 > /proc/sys/vm/drop_caches echo "Memory recycling is completed" >> /var/log/mem.log else echo "Free memory is enough" >> /var/log/mem.log fi