云主机总磁盘大小为120G,在阿里云控制台配置了磁盘使用达90%告警
1. 收到告警短信
2. 当前磁盘占用情况
df -h | grep dev
已达到 89%
3. 开始排查
3-1. 查看哪个目录占用最大
du -sh /* 或者 du -sh /* | sort -h
发现 /www 目录占用 69G
3-2. 查看 /www
du -sh /www/*
/www/wwwlogs 占用16G
/www/wwwroot 占用21G
/www/server 占用31G
3-3. 排查 /www/server
du -sh /www/server/* | sort -h
/www/server/nginx 占用19G
du -sh /www/server/nginx/* 2>/dev/null | sort -h
/www/server/nginx/logs 占用18G
3-4. 发现是 /www/server/nginx/logs/access.log 占用 18G
清理
> /www/server/nginx/logs/access.log
3-5. 同样的方式找出其他目录占用大的文件
清理
> /www/wwwlogs/java/springboot/xxx.log
rm -f /root/logs/rocketmqlogs/rocketmq_client.log.[0-9]*
> /root/logs/rocketmqlogs/rocketmq_client.log
4. 清理完后查看磁盘占用
df -h | grep dev
只占用 52%了
5. 根据上面的操作编写清理脚本 cleanup_disk.sh
下次再有告警直接执行清理脚本即可
#!/bin/bash
# cleanup_disk.sh
# 安全清理云主机日志和缓存
# 执行前请确保你是 root 用户echo "=== 开始磁盘清理 $(date) ==="# --- 1. 清理 Nginx 日志 ---
NGINX_LOG_DIR="/www/server/nginx/logs"
if [ -d "$NGINX_LOG_DIR" ]; thenecho "清理 Nginx 日志..."for f in "$NGINX_LOG_DIR"/*.log; do[ -f "$f" ] && > "$f"done
fi# --- 2. 清理 Spring Boot 日志 ---
SPRING_LOG_DIR="/www/wwwlogs/java/springboot"
if [ -d "$SPRING_LOG_DIR" ]; thenecho "清理 Spring Boot 日志..."for f in "$SPRING_LOG_DIR"/*.log; do[ -f "$f" ] && > "$f"done
fi# --- 3. 清理 RocketMQ 日志 ---
ROCKETMQ_LOG_DIR="/root/logs/rocketmqlogs"
if [ -d "$ROCKETMQ_LOG_DIR" ]; thenecho "清理 RocketMQ 日志..."# 删除旧的 log.* 文件,只保留 rocketmq_client.logrm -f "$ROCKETMQ_LOG_DIR"/rocketmq_client.log.[0-9]*# 清空当前日志[ -f "$ROCKETMQ_LOG_DIR/rocketmq_client.log" ] && > "$ROCKETMQ_LOG_DIR/rocketmq_client.log"
fi# --- 4. 清理 /root 下安装包 ---
echo "清理 /root 下安装包..."
rm -f /root/*.tar.gz /root/*.tar.bz2 # --- 5. 清理 yum 缓存 ---
echo "清理 yum 缓存..."
yum clean allecho "=== 磁盘清理完成 $(date) ==="
df -h