Ubuntu回收内存空间的常用方法
在进行内存回收前,需先了解当前内存占用状态。推荐使用以下命令:
free -h:以人类可读格式(GB/MB)显示内存总量、已用内存、空闲内存、缓冲区缓存及可用内存(available字段代表系统实际可用的内存,包括缓存中可快速释放的部分)。top/htop:动态查看进程级内存占用,按M键可按内存使用量排序,快速识别内存消耗大的进程。Linux内核会利用空闲内存作为磁盘缓存(PageCache、dentries、inodes),以提升文件读写性能。当内存不足时,系统会自动回收缓存,但也可手动释放:
sync && echo 1 | sudo tee /proc/sys/vm/drop_caches(sync确保数据写入磁盘,避免丢失;echo 1仅清理PageCache)。sync && echo 2 | sudo tee /proc/sys/vm/drop_caches。sync && echo 3 | sudo tee /proc/sys/vm/drop_caches(生产环境慎用,可能导致系统短暂卡顿)。APT包管理器会下载.deb包并存储在/var/cache/apt/archives/,长期积累会占用大量磁盘空间:
sudo apt clean(删除所有已下载的.deb包,仅保留锁定文件)。sudo apt autoclean(仅删除无法从仓库重新下载的旧版本包,保留当前可用版本)。sudo apt autoremove(自动卸载自动安装但不再需要的依赖包,如卸载某软件后其依赖的库不再被其他软件使用)。临时文件(如系统日志、用户应用缓存、下载目录中的旧文件)会占用大量空间:
sudo rm -rf /tmp/*(清理/tmp下的临时文件,重启后系统会自动清空,手动清理需谨慎)。rm -rf ~/.cache/*(删除用户目录下的浏览器缓存、IDE缓存、聊天软件缓存等,谨慎操作,避免误删个人数据)。sudo journalctl --vacuum-time=2d(保留最近2天的系统日志,可根据需求调整时间,如--vacuum-size=50M保留最近50MB日志);sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;(清空/var/log下所有.log文件的内容)。卸载不再使用的软件可释放大量内存和磁盘空间:
sudo apt remove --purge 软件名(--purge选项会同时删除软件的配置文件)。sudo apt autoremove(删除自动安装但不再需要的依赖包)。uname -r(查看当前运行的内核版本,避免删除);sudo apt purge linux-image-5.4.0-XX-generic(替换5.4.0-XX为旧内核版本号,保留当前和最新备用内核,建议保留至少2个内核)。图形化或命令行工具可简化清理流程:
sudo apt install bleachbit,支持清理系统缓存、浏览器缓存、日志文件、缩略图缓存等,提供隐私保护功能(如清理浏览历史)。sudo add-apt-repository ppa:gerardpuig/ppa && sudo apt update && sudo apt install ubuntu-cleaner,一键清理缓存、临时文件、旧内核、孤立软件包。sudo apt install stacer,图形化系统优化工具,可直观查看内存使用情况,一键清理缓存、日志、旧内核。swappiness控制系统使用交换空间(Swap)的频率,默认值为60(较高,频繁使用Swap会导致性能下降)。降低该值可减少Swap使用,提升内存利用率:
sudo sysctl vm.swappiness=10(设置为10,数值越小越倾向于使用物理内存)。/etc/sysctl.conf文件,添加vm.swappiness=10,保存后执行sudo sysctl -p使配置生效。sudo rm -rf /var/lib/snapd/cache/*(清理Snap应用的缓存文件)。flatpak uninstall --unused(删除未使用的运行时环境,释放空间)。通过脚本和定时任务实现定期自动清理,避免手动操作:
/root/clean_cache.sh,内容如下:#!/bin/bash
echo "开始清理内存和缓存..."
sync && echo 3 > /proc/sys/vm/drop_caches # 清理内存缓存
sudo apt clean && sudo apt autoremove -y # 清理APT缓存和无用依赖
sudo rm -rf /tmp/* # 清理临时文件
echo "清理完成!"
赋予执行权限:chmod +x /root/clean_cache.sh。sudo crontab -e,添加以下行(每日凌晨2点执行):0 2 * * * /root/clean_cache.sh
保存后重启Cron服务:sudo systemctl restart cron。