Linux自定义命令-深度清理内存缓存-free

版权声明:如果觉得我的博客对你有帮助, 请点赞或评论! https://blog.csdn.net/zongf0504/article/details/88815016

在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching. 这样通过free 查看系统内存, 就会发现物理内存剩余很少.

1. free 命令

  • free 命令详解:
total used free shared buffers cached
Mem: 物理内存 已使用物理内存 未使用物理内存 线程共享内存 磁盘写缓存 磁盘读缓存
-/+ buffers/cache: 缓存已使用内存 缓存未使用内存
Swap 交互分区总内存 交互分区已使用内存 交互分区未使用内存
[root@localhost kafka_2.11-0.11.0.0]# free -m
total used free shared buffers cached
Mem: 7734 1683 6051 3 3 51
-/+ buffers/cache: 1628 6106
Swap: 8023 0 8023

2. 清理缓存

2.1 脚本:freemem

#!/bin/bash
#Desc 释放内存缓冲区
#Auth zongf

#判断是否传入参数
if [ "x$1" = "x" ]; then
limit=1024
else
limit=$1
fi

mem_info(){
#获取已用内存物理内存和可用物理内存
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
#获取当前日期
time=`date +'%Y-%m-%d %H:%M:%S'`
echo "[${time}] used:${used}m, free:${free}m"
}

#获取当前内存
mem_info;

#如果剩余物理内存小于1024m, 则释放缓存的内存
if [ $free -le $limit ] ; then
echo "begin to clean ..."
#清理缓存
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches

mem_info
else
echo "nothing to do ..."
fi

2.2 运行脚本

[root@localhost ~]# ./freemem
[2017-09-13 15:16:37] used:1875m, free:5859m
nothing to do ...
[root@localhost ~]# ./freemem 6000
[2017-09-13 15:16:44] used:1874m, free:5859m
begin to clean ...
[2017-09-13 15:16:44] used:1682m, free:6051m

猜你喜欢

转载自blog.csdn.net/zongf0504/article/details/88815016
今日推荐