如何清理缓存数据linux清理系统缓存的方法linux怎样清理缓存




如何清理缓存数据linux清理系统缓存的方法linux怎样清理缓存

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

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

系统内存查看

系统内存查看

如何清理缓存数据(linux清理系统缓存的方法)(1)

如何清理缓存数据(linux清理系统缓存的方法)(2)

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

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

系统内存监控

系统内存监控

如何清理缓存数据(linux清理系统缓存的方法)(3)

如何清理缓存数据(linux清理系统缓存的方法)(4)

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-Kdrop_caches--Man--next:proc(5)[view(return)|skip(Ctrl-D)|quit(Ctrl-C)]

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

drop_cachesWritingtothiswillcausethekerneltodropcleancaches,aswellasreclaimableslabobjectslikedentriesandinodes.Oncedropped,theirmemorybecomesfree.Tofreepagecache:echo1>/proc/sys/vm/drop_cachesTofreereclaimableslabobjects(includesdentriesandinodes):echo2>/proc/sys/vm/drop_cachesTofreeslabobjectsandpagecache:echo3>/proc/sys/vm/drop_cachesThisisanon-destructiveoperationandwillnotfreeanydirtyobjects.Toincreasethenumberofobjectsfreedbythisoperation,theusermayrun`sync'priortowritingto/proc/sys/vm/drop_caches.Thiswillminimizethenumberofdirtyobjectsonthesystemandcreatemorecandidatestobedropped.Thisfileisnotameanstocontrolthegrowthofthevariouskernelcaches(inodes,dentries,pagecache,etc...)Theseobjectsareautomaticallyreclaimedbythekernelwhenmemoryisneededelsewhereonthesystem.Useofthisfilecancauseperformanceproblems.Sinceitdiscardscachedobjects,itmaycostasignificantamountofI/OandCPUtorecreatethedroppedobjects,especiallyiftheywereunderheavyuse.Becauseofthis,useoutsideofatestingordebuggingenvironmentisnotrecommended.Youmayseeinformationalmessagesinyourkernellogwhenthisfileisused:cat(1234):drop_caches:3Theseareinformationalonly.Theydonotmeanthatanythingiswrongwithyoursystem.Todisablethem,echo4(bit2)intodrop_caches.

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

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

对缓存进行清理

┌──(rootLiruilong)-[/mnt/c/Users/lenovo]└─#free-mtotalusedfreesharedbuff/cacheavailableMem:12480841235504012228Swap:409604096┌──(rootLiruilong)-[/mnt/c/Users/lenovo]└─#echo3>/proc/sys/vm/drop_caches┌──(rootLiruilong)-[/mnt/c/Users/lenovo]└─#free-mtotalusedfreesharedbuff/cacheavailableMem:12480841237202312237Swap:409604096

清理缓存

如何清理缓存数据(linux清理系统缓存的方法)(5)

如何清理缓存数据(linux清理系统缓存的方法)(6)

我们来看看文档

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

Tofreepagecache:echo1>/proc/sys/vm/drop_cachesTofreereclaimableslabobjects(includesdentriesandinodes):echo2>/proc/sys/vm/drop_cachesTofreeslabobjectsandpagecache:echo3>/proc/sys/vm/drop_caches

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

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

一个SHELL

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

#!/bin/bash#@File:clear.sh#@Time:2021/12/2723:52:20#@Author:LiRuilong#@Version:1.0#@Desc:清除缓存的shell#@Contact:1224965096@qq.commax=10000#缓存的最大值clearLog=/var/log/clearfreelogif[!-f$clearLog];thentouch$clearLogfifilesize=$(du-m$clearLog|awk'{print$1}')echo"filesize=$filesize"if[$filesize-gt300];thenecho$clearLog>$clearLogficache=$(free-m|grepMem|awk'{print$(NF-1)}')time=$(date)if[$cache-gt$max]thenecho"$timecache=$cacheflushcachestart!">>$clearLogsyncecho3>/proc/sys/vm/drop_cachesecho"$timeFreeMemorySuccess!">>$clearLogelseecho"$timecache=$cacheMemoryisnormal">>$clearLogfi

发表评论:

最近发表
网站分类
标签列表