Linux的buff/cache占用内存过高解决方法

news/2024/10/24 4:32:10/

最近,公司的开发服务器总是偶尔有一些java服务莫名其妙的停掉。通过排查发现是内存不足,奇怪的是,内存只是用了一半,但是可用的却只有不到1G(峰值时估计更少)。下面是具体的内存使用信息:

 可以看到,可用的内存只有888M,内存共有62G,罪魁祸首就是这个buff/cache占用了27G。

产生原因
Linux操作系统频繁存取文件会导致内存被用光,即便是程序结束后也不会被正常释放,这就会导致buffers和cached占用过高。
首先,简单了解一下buff/cache的介绍:

total:是指计算机总物理内存;
used:已用的内存;
free:空余的内存;
total = used + free总内存;
shared:被多个进程共享的内存;
buffers:用于存放要输出到disk(块存储)的数据,在这里buff是指被OS buffer住的内存;
cached:存放从disk上读出的数据;buffer和cache是为了提高IO性能并由OS管理。


解决方法
Linux具有先进的缓存机制,会针对dentry、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。
因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的。
drop_caches的值可以是0-3之间的数字,代表不同的含义:

0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

我们可以用下面的命令来释放缓存:

# sync  
# echo 1 > /proc/sys/vm/drop_caches
# echo 2 > /proc/sys/vm/drop_caches
# echo 3 > /proc/sys/vm/drop_caches
# sync

执行完命令后,free -h 查看内存,发现可用内存已经达到27G,buff/cache也被释放。

 

这样只是暂时解决问题,我们可以写一个脚本配合定时任务来定时检查清除缓存:

#!/bin/bash
Mem=$(free -m | awk 'NR==2' | awk '{print $4}')
if [ $Mem -gt 1024 ];
     then
echo "Service memory capacity is normal!" > /dev/null
     else
sync
echo "1" > /proc/sys/vm/drop_caches
echo "2" > /proc/sys/vm/drop_caches
echo "3" > /proc/sys/vm/drop_caches
sync

最后,只需将脚本加入定时任务,即可!
 


http://www.ppmy.cn/news/245818.html

相关文章

5 种常见的 Linux 打包类型:tar、gzip、bzip2、zip 、 7z

在 Linux 系统中,打包和压缩文件是常见的操作。不同的打包类型适用于不同的用途和需求。本文将详细介绍 5 种常见的 Linux 打包类型,包括tar、gzip、bzip2、zip 和 7z,以及它们的特点、使用方法和适用场景。 1. tar tar(tape arc…

从小白到大神之路之学习运维第34天---第三阶段---mysql数据库之优化数据库、数据库备份、win10客户端连接

第三阶段基础 时 间:2023年6月6日 参加人:全班人员 内 容: Mysql数据库 目录 前提环境配置 优化 MySQL 数据库备份 Win10客户端连接 前提环境配置 关闭防火墙 (systemtl stop firewalld、iptables -F、setenforce 0)…

Nginx+Tomcat负载均衡,动静分离

文章目录 一.Nginx应用1.1Nginx负载均衡实现原理1.2Nginx动静分离实现原理 二.NginxTomcat负载均衡、动静分离(七层实例) 一.Nginx应用 Nginx是一款非常优秀的HTTP服务软件 支持高达50000个并发连接数的响应拥有强大的静态资源处理能力运行稳定内存、C…

如何卸载或者退出 360天擎

1、直接参考下面这个链接 就可以了 https://ihacksoft.com/1371.html 2、

360 随身wifi安装服务器系统,win7系统无法安装360随身WiFi的解决方法

很多小伙伴都遇到过win7系统无法安装360随身WiFi的困惑吧,一些朋友看过网上零散的win7系统无法安装360随身WiFi的处理方法,并没有完完全全明白win7系统无法安装360随身WiFi是如何解决的,今天小编准备了简单的解决办法,只需要按照 …

MFC 定时器使用

1.通过类向导在对话框基类中添加 OnTimer子类 2.1.绑定事件响应 BEGIN_MESSAGE_MAP(TcpClientDlg, CDialogEx)//其它绑定事件响应ON_WM_TIMER() END_MESSAGE_MAP()2.2…h文件 afx_msg void OnTimer(UINT_PTR nIDEvent

360浏览器html位置,win7系统查看360浏览器收藏夹位置的操作方法

很多小伙伴都遇到过对win7系统查看360浏览器收藏夹位置进行设置的困惑吧,一些朋友看过网上对win7系统查看360浏览器收藏夹位置设置的零散处理方法,并没有完完全全明白win7系统查看360浏览器收藏夹位置是如何设置的,今天小编准备了简单的操作办…

kuangshenshuo-预科-Doc命令

Doc命令 打开CMD方式 开始 Windows系统 命令提示符 win键 R, 输入cmd, 打开控制台 (推荐) 在任意文件夹下面,按住shift键 鼠标右键点击,在此处打开命令窗口 资源管理器地址栏前面加上cmd 路径 管理员方式运行&…