阿里云服务器系统盘使用率过高是一个常见问题,可能导致系统变慢、服务异常甚至宕机。请按照以下步骤系统地排查和解决:
第一步:紧急情况处理(如果已影响服务)
- 立即清理临时文件:
sudo rm -rf /tmp/* sudo rm -rf /var/tmp/* - 清理包管理器缓存(CentOS/RHEL):
sudo yum clean all(Ubuntu/Debian):
sudo apt-get clean - 清空系统日志(谨慎操作,建议先备份):
sudo truncate -s 0 /var/log/*.log # 或清理特定大日志文件 sudo journalctl --vacuum-time=3d # 清理3天前的系统日志
第二步:定位大文件/目录(根本原因分析)
- 快速查看磁盘使用概况:
df -h # 查看各分区使用率 du -sh /* # 查看根目录下各文件夹大小 -
查找前10大文件/目录:
# 查找大目录 sudo du -xh / | sort -rh | head -20 # 查找大文件(>100MB) sudo find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | awk '{ print $9 ": " $5 }' - 常见占用大户检查:
- 日志文件:
/var/log/ - 缓存文件:
/var/cache/ - Docker资源:
/var/lib/docker/(如果使用Docker) - 应用数据:MySQL (
/var/lib/mysql)、Nginx/Apache日志等
- 日志文件:
第三步:针对性清理方案
A. 系统日志清理
# 1. 使用logrotate管理日志(默认已配置,可调整)
sudo vi /etc/logrotate.conf # 调整轮转策略
# 2. 手动清理旧日志(示例保留最近7天)
find /var/log -name "*.log" -type f -mtime +7 -delete
B. 应用日志/数据清理
- Nginx/Apache:清理访问日志、错误日志
- MySQL:清理binlog、慢查询日志
- Docker:
docker system prune -a # 清理无用镜像、容器、卷 - Kubernetes:清理Evicted Pods、旧镜像
C. 内核转储文件清理
# 检查并清理core dump文件
find / -name "core.*" -exec rm -f {} ;
第四步:长期优化与预防
-
扩容系统盘(最彻底方案)
- 在阿里云控制台创建快照备份
- 通过「云盘扩容」功能在线扩容(需在控制台和系统内分别操作)
- 扩容后执行
growpart和resize2fs/xfs_growfs扩展文件系统
-
设置监控告警
- 在云监控控制台设置系统盘使用率告警(建议阈值80%)
- 配置日志轮转策略,避免日志无限增长
-
数据迁移与分离
- 将应用数据迁移到单独的数据盘(ESSD/高效云盘)
- 修改应用配置,将日志、上传文件等写入数据盘
-
自动化清理脚本示例
#!/bin/bash # 每周清理的脚本示例 LOG_DIR="/var/log" find $LOG_DIR -name "*.log" -mtime +30 -delete docker system prune -f 2>/dev/null journalctl --vacuum-time=7d
第五步:特殊场景处理
- Docker overlay2占用过大:
# 查看docker磁盘使用 docker system df # 清理所有未使用资源 docker system prune --volumes -a - MySQL binlog占用:
-- 设置binlog过期时间(示例7天) SET GLOBAL binlog_expire_logs_seconds=604800; PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
注意事项
- 操作前务必备份重要数据,特别是删除文件前
- 谨慎使用
rm -rf,建议先ls确认文件列表 - 对于生产环境,建议在维护窗口操作
- 清理后重启服务检查是否正常
如果以上操作后问题仍未解决,建议通过阿里云工单联系技术支持,他们可以协助分析具体占用原因并提供更专业的解决方案。
CLOUD技术笔记