一、系统环境
- 系统版本
CentOS Linux release 7.3.1611 (Core) - 内核版本
Linux xx-user 3.10.0-514.el7.x86_64 #1 SMP - 背景
服务器分配的账号是普通用户,只能执行sudo
命令
二、缓存查看及基本概念
- 查看内存使用情况
[user01@xx-user ~]$ free -h
total used free shared buff/cache available
Mem: 31G 4.2G 202M 1.6G 24G 25G
Swap: 15G 756K 15G
-
基本概念
Mem与Swap区分
Mem 内存的使用信息
Swap 交换空间的使用信息
Mem内各字段的区分
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小
free 与 available 的区别
free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。
三、清理缓存命令
# 运行sync将dirty的内容写回硬盘
[user01@xx-user ~]$ sync
# To free pagecache:
# 表示清除 pagecache
[user01@xx-user ~]$ echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
# 表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache
[user01@xx-user ~]$ echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
# 表示清除pagecache和slab分配器中的缓存对象
[user01@xx-user ~]$ echo 3 > /proc/sys/vm/drop_caches
四、报错与解决
-
报错
运行命令清缓存时,报错:[user01@xx-user ~]$ echo 1 > /proc/sys/vm/drop_caches -bash: /proc/sys/vm/drop_caches: Permission denied
-
原因
bash 拒绝这么做,提示权限不够,是因为重定向符号 “>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限,
但是没有让 “>” 命令也具有root 权限,所以 bash 会认为这个命令没有写入信息的权限。 -
解决
“sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行sudo sh -c "echo 1 > /proc/sys/vm/drop_caches" sudo sh -c "echo 2 > /proc/sys/vm/drop_caches" sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" # 或者 echo 1 |sudo tee /proc/sys/vm/drop_caches
五、清理结果
-
清理前
[user01@xx-user ~]$ free -h total used free shared buff/cache available Mem: 31G 4.2G 202M 1.6G 24G 25G Swap: 15G 756K 15G
-
清理后
[user01@xx-user ~]$ free -h total used free shared buff/cache available Mem: 31G 4.2G 24G 1.6G 2.1G 25G Swap: 15G 756K 15G
【解决方法参考自】:https://blog.csdn.net/don_chiang709/article/details/91489003