linux服务器cache占用内存过高导致内存不足

发布时间 2023-06-02 15:52:12作者: 惊蛰2020

问题描述

linux服务器内存不足触发监控报警。

K8S在创建pod之后启动失败,日志报错如下:

 

问题检查

登录服务器发现服务器8G内存正在被使用的和空闲内存大概4G,还有大概4G被cache占用

 

 

 

这个cache占用了大量内存,那么这个cache时干什么用的?

Linux 中的缓存称为Page Cache它是内核为缓存文件系统磁盘访问而保留的一定数量的系统内存。这是为了使整体性能更快。在 Linux 读取系统调用期间,内核检查缓存是否包含请求的数据块。如果存在,那么将是一次成功的缓存命中。缓存返回此数据而不对磁盘系统执行任何 I/O。

Linux 缓存方法称为回写缓存首先,数据被写入缓存并标记,直到同步到磁盘。然后,内核维护内部数据结构,优化在缓存是指其它服务需要使用内存时从缓存中驱逐哪些数据来达到释放缓存。例如,当内存使用量达到某个阈值时,后台任务开始将脏数据写入磁盘,从而清空内存缓存。

在广义上,缓冲区是用于在从一个地方移动到另一个地方时临时存储数据的内存区域缓冲区是存储在页面缓存下的数据的磁盘块表示。此外,缓冲区包含位于页面缓存下的文件或数据的元数据。

另一方面,缓存是一个临时存储区域,用于存储经常访问的数据以供快速访问。

 

既然知道了cache的作用,那么怎么释放它?

1.直接手动释放

#缓存落盘
sync
#释放pagecache echo 1 > /proc/sys/vm/drop_caches #释放dentries和inode echo 2 > /proc/sys/vm/drop_caches #释放pagecache、dentries和inode echo 3 > /proc/sys/vm/drop_caches

 

2.自动释放