版权声明:如果觉得我的博客对你有帮助, 请点赞或评论! 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