温馨提示×

怎么清理CentOS内存占用

小樊
35
2026-07-08 21:59:19
栏目: 智能运维

清理 CentOS 内存占用可以从系统层面进程层面两个方向入手。下面按常用实际操作给你一套完整方案。


一、先查看内存使用情况(不要盲目清理)

1️⃣ 查看内存占用

free -h

top

重点关注:

  • used:已用内存
  • buff/cache:缓存(可以释放,但不一定需要
  • available:系统真正可用内存

⚠️ Linux 会把空闲内存用来做缓存,这是正常优化,不是内存泄漏


二、清理缓存(推荐,安全)

2️⃣ 清理 pagecache / dentries / inodes(不会影响运行程序)

sync
echo 3 > /proc/sys/vm/drop_caches

解释:

  • 1:只清理 pagecache
  • 2:清理 dentries + inodes
  • 3:全部清理(最常用)

不会杀进程,生产环境可用


三、找出占用内存最多的进程

3️⃣ 按内存排序查看进程

ps aux --sort=-%mem | head -20

top
# 然后按 Shift + M

常见内存大户:

  • Java(特别是 JVM)
  • MySQL / MariaDB
  • Docker / K8s
  • Nginx + PHP
  • Elasticsearch

四、针对性清理(最有效)

4️⃣ 重启高内存服务(推荐)

例如:

systemctl restart mysql
systemctl restart docker
systemctl restart php-fpm

而不是重启系统。


5️⃣ 停止无用服务

systemctl list-units --type=service --state=running

关闭不必要服务:

systemctl stop 服务名
systemctl disable 服务名

五、Docker / 容器导致的“内存不释放”

6️⃣ 清理 Docker 资源

docker system prune -a

查看容器内存:

docker stats

六、Swap 过多(看起来内存用了很多)

7️⃣ 查看 swap

free -h
swapon -s

关闭 swap(谨慎):

swapoff -a

永久关闭(不推荐服务器):

vim /etc/fstab
# 注释 swap 行

七、检查是否有内存泄漏

8️⃣ 使用 slabtop

slabtop

如果 dentry / inode_cache 异常大,通常是文件缓存问题。


八、终极方案(不推荐轻易用)

9️⃣ 重启服务器(最后手段)

reboot

九、CentOS 特别提示

✅ CentOS 7

yum install htop
htop

✅ CentOS 8 / Stream

dnf install htop

十、判断是否“真的需要清理”

不需要清理的情况

  • buff/cache 很大
  • available 还很多

需要清理的情况

  • available 很少
  • Java / MySQL OOM
  • 系统卡顿

十一、我可以帮你精准分析

你可以直接把下面命令的输出发给我:

free -h
top -b -n 1 | head -20

我可以帮你判断:

  • 是缓存问题?
  • 是进程泄漏?
  • 是 JVM / MySQL 配置问题?

如果你愿意,也可以告诉我:

  • CentOS 版本
  • 服务器用途(Web / 数据库 / Docker)
  • 内存总量

0