百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

关于 Linux中缓存清理的一些笔记

sinye56 2025-03-01 15:23 2 浏览 0 评论

写在前面


  • 一个群里看到有小伙伴问,之前有没有遇到过。
  • 给了参考意见之后感觉好像不是特别对,有点误人子弟:(。
  • 所以总结下,博文的内容涉及
    • Linux内存查看监控
    • 缓存清理及参数介绍
    • 一个定时清理的脚本

归根结底,长得好,无论男女,怎么都是对的,长得不好看,大概就是万般皆罪。 ——烽火戏诸侯《剑来》


嗯,关于缓存清理,小伙伴一定不陌生,个人觉得通过修改drop_caches内核参数的形式来清理缓存,只能是在生产环境用于临时解决问题,本质还是要对应用进行分析,看看是什么原因导致的内存溢出等OOM问题,一般情况下,内存溢出可以通过交换分区来确定

当然,如果是因为业务量的原因,业务高峰,或者需要算力等正常原因,可以定期通过sync将缓存区没有写入数据写入磁盘,然后修改内核参数 drop_caches的值来清理缓存,或者通过新建交换分区调整swappiness交换分区频率来解决问题,如果虚机的话可以申请扩内存

系统内存查看

系统内存查看

其中: Mem:实际的内存 | Swap: 交换分区 |

  • total 内存总数
  • used 已经使用的内存数
  • free 空闲的内存数
  • shared 多个进程共享的内存总额
  • buff/Cache 缓存的内存大小
  • available 可用内存

系统内存监控

系统内存监控

vmstat: 是一个内存监控工具,后面的数字为刷新频率 | top 不多说

vmstat

列描述

free

空闲的物理内存的大小。

buff

Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存.

cache

cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

修改drop_caches内核参数清理缓存

我们先看看帮助文档:内核参数的帮助文档查看方式

┌──[root@liruilongs.github.io]-[/proc/sys/vm]
└─$ man -K drop_caches
--Man-- next: proc(5) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]

嗯,英文好的小伙伴可以看看

drop_caches

Writing to this will cause the kernel to drop clean caches, as well as
reclaimable slab objects like dentries and inodes.  Once dropped, their
memory becomes free.

To free pagecache:
	echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
	echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
	echo 3 > /proc/sys/vm/drop_caches

This is a non-destructive operation and will not free any dirty objects.
To increase the number of objects freed by this operation, the user may run
`sync' prior to writing to /proc/sys/vm/drop_caches.  This will minimize the
number of dirty objects on the system and create more candidates to be
dropped.

This file is not a means to control the growth of the various kernel caches
(inodes, dentries, pagecache, etc...)  These objects are automatically
reclaimed by the kernel when memory is needed elsewhere on the system.

Use of this file can cause performance problems.  Since it discards cached
objects, it may cost a significant amount of I/O and CPU to recreate the
dropped objects, especially if they were under heavy use.  Because of this,
use outside of a testing or debugging environment is not recommended.

You may see informational messages in your kernel log when this file is
used:

	cat (1234): drop_caches: 3

These are informational only.  They do not mean that anything is wrong
with your system.  To disable them, echo 4 (bit 2) into drop_caches.

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的系统 i-node、已延迟地块 I/O 和读写映射文件)

┌──(rootLiruilong)-[/mnt/c/Users/lenovo]
└─# sync

对缓存进行清理

┌──(rootLiruilong)-[/mnt/c/Users/lenovo]
└─# free -m
               total        used        free      shared  buff/cache   available
Mem:           12480          84       12355           0          40       12228
Swap:           4096           0        4096

┌──(rootLiruilong)-[/mnt/c/Users/lenovo]
└─# echo 3 > /proc/sys/vm/drop_caches

┌──(rootLiruilong)-[/mnt/c/Users/lenovo]
└─# free -m
               total        used        free      shared  buff/cache   available
Mem:           12480          84       12372           0          23       12237
Swap:           4096           0        4096

清理缓存

我们来看看文档

写入drop_caches将导致内核丢弃干净的缓存,以及可回收的slab对象,如dentry和inode。一旦下降,他们内存得到释放。
具体的参数描述

To free pagecache:
	echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
	echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
	echo 3 > /proc/sys/vm/drop_caches

使用此文件可能会导致性能问题。因为它丢弃了缓存对象,它可能会花费大量的I/O和CPU来重新创建掉落的物体,特别是大量使用时。由于这个原因,不建议在测试或调试环境之外使用。

在内核的文档里也说不建议在测试或调试环境之外使用,重建一些需要的缓存还是会消耗大量的I/O和CPU,同时这也不是一个必要操作,一些不用的缓存系统会自动的清理掉

一个SHELL

最后在和小伙伴分享一个清理缓存的shell

#!/bin/bash

#@File    :   clear.sh
#@Time    :   2021/12/27 23:52:20
#@Author  :   Li Ruilong
#@Version :   1.0
#@Desc    :   清除缓存的shell
#@Contact :   1224965096@qq.com


max=10000 # 缓存的最大值

clearLog=/var/log/clearfreelog
if [ ! -f $clearLog ];then
  touch $clearLog
fi

filesize=$(du -m  $clearLog | awk '{ print $1 }')
echo  "filesize=$filesize"
if [ $filesize -gt 300 ]; then
echo $clearLog
  > $clearLog
fi

cache=$( free -m | grep Mem | awk '{print $(NF-1)}')

time=$(date)


if [ $cache -gt $max ]
then
    echo "$time cache=$cache    flush cache start!" >> $clearLog
    sync
    echo  3 > /proc/sys/vm/drop_caches
    echo "$time FreeMemory Success!" >> $clearLog
else
    echo "$time cache=$cache  Memory is normal" >> $clearLog
fi

相关推荐

Linux中10大常用命令之sort使用案例

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言Linux中的sort命令用于对文本文件的内容进行排序。本教程向您展示了sort...

java开发常用的Linux命令,高频的没你想象的多

Linux的命令非常多,多到有些使用的场景你工作两三年也没有遇到过,工作三四年才能遇到(Linux内核开发,Shell脚本开发,嵌入式开发、、、),但这个不是今天分享的重点,今天分享的重点是Java开...

linux常用命令(收藏版)

linux小白注意啦,给大家分享一点干货,请笑纳!1.关机命令shutdown-hnow关闭系统(1)init0关闭系统(2),0为系统的进程号telinit0关闭系统(3)shutdo...

延续Win10三年需付超3000元!微软彻底封堵:删除绕过Win11系统要求教程、将第三方工具标记为恶意软件

一切都是为了用户能够正规地升级到Windows11。整理|屠敏出品|CSDN(ID:CSDNnews)距离Windows10退役仅剩8个月,微软最近这段时间,终是忍不住接连出手了...

敲完就让你提桶跑路的Linux命令

不谨慎可能就会让你提桶的Linux命令!!!删除文件rm-rf该命令是删除文件或文件夹等最快的方式之一。删除后的内容很难恢复,如果删除系统文件可能会导致系统崩坏。˃rm-rf/#强制删除根...

超级蠕虫,累计感染40万台服务器,让Linux内核服务器感染两年

最近著名安全公司ESET发布安全报告,报告分析了其对一个超级蠕虫Ebury的15年追踪分析。在15年中该病毒持续感染了40万台服务器,曾经在2011年(2009年)攻克了Linux内核维护站点kern...

linux redhat破解密码

适用于RedhatCentosFedora1.开机选择第一个启动项,按e进入编辑模式2.在启动项编辑模式找到linux16开头的文件,按ctrl+e快速定位到该行的行末,输入空格rd.break...

慎用!Linux最危险的10个命令!

Linux是一个强大而灵活的操作系统,它提供了许多功能丰富的命令和工具,让用户可以方便地管理和控制系统。但是,有些命令如果不小心或不知情地使用,可能会造成严重的后果,甚至导致系统崩溃或数据丢失。因此,...

Linux文件和目录删除

今天只讲一个命令,这个命令已经让万千运维人既爱又恨。rm删除文件或者目录基本用法:-i显示删除提示信息-f强制删除文件-r进行目录的递归删除在公司里为了保证数据安全,一般会创建一个alias...

给你的Linux系统穿上“防弹衣”:安全加固全攻略

为什么Linux系统需要安全加固在当今数字化时代,Linux系统以其开源、稳定、高效等特性,在服务器领域占据着举足轻重的地位。无论是大型互联网公司的核心业务,还是中小企业的日常运营,都离不开L...

一天一个Linux命令:文件操作「删」rm

命令:rm-rf文件名(慎用,慎用,慎用)rm(选项)(参数)命令功能:rm-rf是一条UNIX系统下的文件删除命令,作用是无提示地强制递归删除一个目录中的一个或多个文件或目录,如果没有使用...

Linux下通过 rm -f 删除大量文件时报错:Argument list too long

问题现象云服务器ECSLinux下通过rm-f删除大量的小文件时出现类似如下错误信息:-bash:?/bin/rm:?Argument?list?too?long如下图所示:问题原因如?待删...

这10个Linux命令太危险,千万慎用!数据毁灭的瞬间只需一个回车

你好,这里是网络技术联盟站,我是瑞哥。Linux系统,以其开源自由的特性,吸引了无数开发者和科技爱好者。其强大的命令行工具赋予了用户前所未有的控制能力。然而,正如俗话所说,“能力越大,责任越大”。某些...

Linux的10大危险命令,用过的运维都很刑

rm-rf命令该命令可能导致不可恢复的系统崩坏。˃rm-rf/#强制删除根目录下所有东西。˃rm-rf*#强制删除当前目录的所有文件。˃rm-rf.#强制删除当前...

Linux环境变量设置与查看全攻略

Linux环境变量设置与查看全攻略在Linux系统中,环境变量是用于定义系统和用户级设置的一种方法,它可以影响程序的行为和系统的运行方式。了解如何设置和查看环境变量对于Linux用户来说是非常重要的技...

取消回复欢迎 发表评论: