linux释放内存占用

参考

https://www.cnblogs.com/gaohongyu/p/13737809.html
https://blog.csdn.net/qq_39526250/article/details/89491565

环境

centos7 and ubuntu20.04

现象

image-20230823152936029

参数:
• total:总计物理内存的大小。
• used:已使用多大。
• free:可用有多少。
• Shared:多个进程共享的内存总额。
• Buffers/cached:磁盘缓存的大小。
• 所以空闲内存=free+buffers+cached=total-used

现象-查看步骤

1
2
3
4
5
6
7
8
# 查看内存概况
free -h
# 内存的详细使用情况
cat /proc/meminfo
# 查看内存占用高的前20
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20
# 动态查看内存占用
slabtop

image-20230823153206603

解决

image-20230823153316212

要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放网页缓存
2 – 释放dentriesinodes
3 – 释放所有缓存

知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

1
2
3
4
5
6
7
8
9
10
11
# 查看文件/proc/sys/vm/drop_caches默认值
cat /proc/sys/vm/drop_caches
# 同步数据
sync
# 释放内存
echo "3" > /proc/sys/vm/drop_caches

# 其他释放参考
echo 1 > /proc/sys/vm/drop_caches --释放网页缓存
echo 2 > /proc/sys/vm/drop_caches --释放目录项和索引
echo 3 > /proc/sys/vm/drop_caches --释放网页缓存,目录项和索引

NOTE: 先使用sync将所有未写的系统缓存区存储至磁盘中,包含已经修改的i-node、已延迟的块I/O和读写映射文件,避免在释放缓存过程中丢失数据。

效果(free -h

image-20230823181007512

扩展

image-20230823153741627

教程结束。