网站忘记密码功能黄冈网站推广策略
linux系统定时清理缓存
- 1. 前言
- 2. 环境
- 3.思路
- 4. 操作
- 4.1.查看当前内存/缓存
- 3.2. 释放内存/缓存
- 3.3.定时执行清理内存/缓存脚本
- 3.3.1. 定时任务说明
- 3.3.2. 定时任务设置
1. 前言
Linux系统中有先进的缓存机制,会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作,有效缩短 I/O系统调用(比如read,write)的时间。但当进行了大量文件操作之后,缓存会把内存资源基本用光,导致系统缓慢,使用swap空间,影响了性能,这时就需要清理缓存了。
说到清理内存/缓存,那么不得不提到/proc这一个虚拟文件系统,这里面的数据和文件都是内存中的实时数据,很多参数的获取都可以从下面相应的文件中得到,比如查看某一进程占用的内存大小和各项参数,cpu和主板的详细信息,显卡的参数等。
缓存将内存资源消耗完毕,最直观的现象就是内存告警。
2. 环境
CentOS Linux release 7.6.1810 (Core)
3.思路
- 通过操作内存管理文件
/proc/sys/vm/drop_chches
管理内存 - 使用系统自带定时任务操作内存管理
4. 操作
4.1.查看当前内存/缓存
# free -htotal used free shared buff/cache available
Mem: 15G 2.8G 11G 801M 1.5G 11G
Swap: 4.0G 0B 4.0G
参数说明:
参数 | 说明 |
---|---|
total | 内存总数 |
used | 已使用内存数 |
free | 空闲内存数 |
shared | 多个进程共享的内存数 |
buff | 缓存(用于目录,inode值) |
cache | 缓存(用于已打开的文件) |
available | 可用内存 |
3.2. 释放内存/缓存
释放语句
/proc/sys/vm/dorp_caches
其中对应的值分别为 0、1、2、3,代表不通的含义
0: 不释放(系统默认值)
1: 释放页面缓存
2: 释放dentries和inodes
3: 释放所有缓存
直接使用语句操作
释放页面缓存
echo 1 > /proc/sys/vm/drop_caches
释放dentries和inodes
echo 2 > /proc/sys/vm/drop_caches
释放所有缓存
echo 3 > /proc/sys/vm/drop_caches
编制脚本
#!/bin/bash
#------------------------------
# File Name : free_buff.sh
# Create Date : 2024-01-07
# Description : clear the buff of linux
#------------------------------
# 1.clear pagecache - 清理页面缓存
echo 1 > /proc/sys/vm/drop_caches
# 2.clear dentries and inodes - 清理目录缓存
echo 2 > /proc/sys/vm/drop_caches
# 3.clear pagecache dentries and indoes - 清理页面缓存和目录缓存
echo 3 > /proc/sys/vm/drop_caches
执行完脚本或者单独命令后可以通过如下命令查看内存/缓存情况
free -h
执行完毕后会释放一部分资源,但是由于业务在运行,过段时间资源又会上来,手动继续执行,可以解决,让服务器自动执行也是一个不错的办法。
3.3.定时执行清理内存/缓存脚本
3.3.1. 定时任务说明
Linux crontab 是 Linux 系统中用于设置周期性被执行的指令的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
Linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
格式:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
通过编辑crontab文件夹进行定时任务的设置。
查看当前用户crontab文件
crontab -l
编辑当前用户的crontab文件
crontab -e
删除当前用户的crontab文件
crontab -r
3.3.2. 定时任务设置
将3.2.
中的脚本设置为每天2:59执行,确定脚本名称和位置/tmp/free_buff.sh
编辑定时任务
crontab -e
59 2 * * * /tmp/free_buff.sh
注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
59 2 * * * /tmp/free_buff.sh > /dev/null 2>&1
验证脚本有效性,
查看内存/缓存数据
free -h
3点以后使用上述名称查看。