清除Linux缓存

/proc/sys/vm/drop_caches的值,默认为0

简单说,清除系统对内存的cache,使用root做下面几步:
sync; echo 3 > /proc/sys/vm/drop_caches
sync; echo 0 > /proc/sys/vm/drop_caches

1、关于drop_caches的官方说明如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

2、proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存,来对当前kernel的行为做出调整。
0 – 不释放
1 – 释放页缓存,清空最近访问过的文件页面缓存
2 – 释放dentries和inodes,清空文件节点缓存和目录项缓存
3 – 释放所有缓存,清空1和2所有内容的缓存

3、Linux内核会将它最近访问过的文件页面缓存在内存中一段时间,这个文件缓存被称为pagecache。Inode是linux/unix操作系统中的一种数据结构,包含了各文件相关的一些重要信息。在创建文件系统时,就会同时创建大量的inode。一般inode表会占用文件系统磁盘空间的1%。

目录项缓存(dcache)dentries

各参数含义:
total:总物理内存
used:已使用内存
free:完全未被使用的内存
shared:应用程序共享内存
buffers:缓存,主要用于目录方面,inode值等
cached:缓存,用于已打开的文件
-buffers/cache:应用程序使用的内存大小,used减去缓存值
+buffers/cache:所有可供应用程序使用的内存大小,free加上缓存值

其中:
total = used + free
-buffers/cache=used-buffers-cached,这个是应用程序真实使用的内存大小
+buffers/cache=free+buffers+cached,这个是服务器真实还可利用的内存大小

<think>我们正在讨论Linux系统清除缓存的方法。根据引用[1]和引用[2],我们可以总结出以下方法: 引用[1]主要针对Arch Linux系统(使用pacman包管理器): 1. 清理未缓存的包(即清理已安装包的老旧版本缓存):`sudo pacman -Sc` 2. 清理所有缓存(包括当前安装的包的缓存,谨慎使用):`sudo pacman -Scc` 另外,还提到清理系统缓存(可能是内存缓存,但pacman清理的是软件包缓存,所以这里需要区分)。 引用[2]提供了多种包管理器缓存清理方法: - apt(Debian/Ubuntu等):`sudo apt clean` 或 `sudo apt autoclean` - conda:`conda clean -t`(清理tar包)或 `conda clean -a`(清理所有缓存) - pip:`pip cache purge` - dnf(Fedora):`sudo dnf clean all` - yum(RHEL/CentOS等):`sudo yum clean all` - snap:`sudo rm -rf /var/cache/snapd/`(注意:删除snapd的缓存目录) - npm:`npm cache clean --force` - composer:`composer clear-cache` 但是,用户的问题是关于Linux系统清除缓存,可能包括两个方面: 1. 包管理器的缓存(如上面所述) 2. 系统内存中的缓存(即内核管理的磁盘缓存和内存缓存) 对于系统内存中的缓存,常用的方法是通过修改内核参数来释放: - 释放页缓存(PageCache):`sudo sync && sudo sysctl -w vm.drop_caches=1` - 释放目录项和inode缓存:`sudo sync && sudo sysctl -w vm.drop_caches=2` - 同时释放页缓存、目录项和inode缓存:`sudo sync && sudo sysctl -w vm.drop_caches=3` 注意:在释放缓存前使用`sync`命令确保未写入磁盘的数据被写入。 另外,也可以使用`echo`命令来释放(需要root权限): - `echo 1 | sudo tee /proc/sys/vm/drop_caches` # 释放页缓存 - `echo 2 | sudo tee /proc/sys/vm/drop_caches` # 释放目录项和inode缓存 - `echo 3 | sudo tee /proc/sys/vm/drop_caches` # 释放所有缓存 注意:这些操作会立即释放内核管理的缓存,但不会影响应用程序的内存(如堆栈等)。另外,释放缓存后,系统可能会因为需要重新缓存数据而暂时变慢,直到缓存重新建立。 因此,我们需要根据用户的具体需求(清理包管理器缓存还是释放内存缓存)来提供不同的方法。 现在,我们按照要求组织回答: 回答结构: 1. 介绍清理包管理器缓存的方法(按不同包管理器分类) 2. 介绍释放系统内存缓存的方法 3. 注意事项 同时,回答中需要遵循: - 行内数学表达式使用`$...$` - 独立公式使用`$$...$$` - 使用中文 - 生成相关问题 注意:由于清理缓存的具体命令不涉及数学公式,所以数学表达式的使用可能不多,但如果有涉及数值说明的地方,我们会尽量使用。 例如,在解释内存缓存时,我们可以提到缓存的大小,比如当前缓存大小可以通过`free -h`查看,其中缓存大小在输出中显示为`cached`列(单位可以是MB、GB等),可以用数学表达式表示转换关系:$1GB = 1024MB$。 下面开始回答: </think>以下是 Linux 系统清除缓存的方法总结,涵盖系统内存缓存和软件包缓存两大类: --- ### 一、系统内存缓存清理(立即释放 RAM) 通过内核参数控制缓存释放: ```bash # 释放页缓存 (PageCache) sync && echo 1 | sudo tee /proc/sys/vm/drop_caches # 释放目录项和 inode 缓存 sync && echo 2 | sudo tee /proc/sys/vm/drop_caches # 释放所有缓存(页缓存+目录项+inode) sync && echo 3 | sudo tee /proc/sys/vm/drop_caches ``` - ✅ `sync` 强制写入磁盘缓存避免数据丢失 - ✅ 效果即时可见(查看内存:`free -h`) - 🚫 非持久化设置(重启失效)[^1] --- ### 二、软件包缓存清理(按包管理器分类) #### 1. APT 系 (Debian/Ubuntu) ```bash sudo apt clean # 删除所有已下载的 .deb 包 sudo apt autoclean # 仅删除无法再下载的旧包 ``` #### 2. Pacman 系 (Arch/Manjaro) ```bash sudo pacman -Sc # 清理未安装包的缓存 sudo pacman -Scc # 清理所有缓存(谨慎使用)[^1] ``` #### 3. DNF/YUM 系 (Fedora/RHEL) ```bash sudo dnf clean all # Fedora/CentOS 8+ sudo yum clean all # RHEL/CentOS 7 ``` #### 4. 语言环境缓存 ```bash # Pip pip cache purge # Conda conda clean -a # 清理所有缓存(含索引/包/tarballs) conda clean -t # 仅清理 tarballs[^2] # NPM npm cache clean --force ``` --- ### 三、深度清理工具 ```bash # 查找大缓存目录(按大小排序) sudo du -h /var/cache /tmp ~/.cache | sort -rh | head -20 # 删除用户级缓存 rm -rf ~/.cache/* # 图形界面缓存文件 rm -rf /tmp/* # 临时文件(需sudo) ``` --- ### 注意事项 1. **内存缓存** 释放公式:$$ \text{可用内存} = \text{Free} + \text{Cached} + \text{Buffers} $$ 清理后系统会重建缓存,不影响性能[^1] 2. **包管理器缓存** 清理后下次安装需重新下载包,可使用 `--keep-cache` 参数保留 3. **安全建议** ```bash # 清理系统日志(保留最新) sudo journalctl --vacuum-time=7d # 保留7天日志 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值