ECS 运维实战:Linux 磁盘空间深度清理、Swap 虚拟内存优化与自动化巡检

举报
yd_273651526 发表于 2026/10/31 12:02:36 2026/10/31
【摘要】 本文总结了华为云弹性云服务器(ECS)在长期运行过程中的高频运维优化技巧,涵盖大文件与 systemd 日志清理、Docker 冗余资源回收、Swap 虚拟内存配置防 OOM 崩溃,以及利用 Crontab 编写定时自动化维护脚本的完整流程。

前言

在使用华为云弹性云服务器(ECS)或 Flexus 应用服务器 L 实例运行业务一段时间后,开发者往往会遇到两类高频运维问题:一是随着系统日志、Docker 镜像及各类缓存的堆积,云硬盘(系统盘)空间逐渐告急;二是在运行编译任务或突发高并发服务时,小规格内存实例容易触发 Linux 内核的 OOM(Out of Memory)机制导致进程被强制终止。

本文将结合日常真实的运维场景,分享一套在华为云 Ubuntu / CentOS 环境下精准排查并释放磁盘空间、配置 Swap 虚拟内存防内存溢出以及利用 Crontab 实现自动化巡检清理的实用方案。


一、 磁盘空间占用快速排查与无损清理

当发现服务器提示 No space left on device 时,首先通过 df -h 查看整体分区占用情况,随后分步骤清理无效文件。

1. 定位大文件与高占用目录

使用以下命令快速找出根目录下占用空间排名前 10 的目录:

# 查看各挂载点使用率
df -h

# 统计根目录下各一级目录的大小并按降序排列
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -n 10

若需要直接查找全盘大于 100MB 的单个大文件(如意外生成的 core dump 或巨型未切割日志),可执行:

sudo find / -type f -size +100M -exec ls -lh {} + 2>/dev/null | awk '{ print $9 ": " $5 }'

2. 清理 systemd 系统日志(Journal)

Linux 的 systemd-journald 服务默认会持续记录系统日志,运行数月后往往会占用数 GB 空间。我们可以通过以下命令安全回收:

# 查看当前系统日志占用的磁盘空间
journalctl --disk-usage

# 仅保留最近 7 天的日志
sudo journalctl --vacuum-time=7d

# 或者限制日志最大总体积不超过 200MB
sudo journalctl --vacuum-size=200M

为了防止日后再次膨胀,建议直接修改配置文件 /etc/systemd/journald.conf,限制持久化日志上限:

sudo sed -i 's/#SystemMaxUse=/SystemMaxUse=200M/g' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

3. 清理软件包缓存与 Docker 悬空资源

针对 Ubuntu/Debian 系统的 APT 缓存及残留依赖:

sudo apt autoremove -y
sudo apt clean

如果服务器上部署了 Docker,未使用的历史镜像、构建缓存和已停止容器往往是占用大户,可通过一条命令安全清理所有未被当前运行容器引用的资源:

docker system prune -a -f --volumes

二、 配置 Swap 交换分区防止 OOM 崩溃

对于 1核1G 或 2核2G 的轻量级云服务器,在运行 MySQL、Java 应用或执行 npm run build 前端打包时,物理内存极易耗尽。通过划分 2GB 的云硬盘空间作为 Swap 虚拟内存,可以显著提升系统的抗峰值能力。

1. 创建并激活 2GB Swap 文件

在终端依次执行以下命令:

# 1. 创建大小为 2GB 的交换文件
sudo fallocate -l 2G /swapfile

# 2. 设置严格的权限(仅 root 可读写,防止安全警告)
sudo chmod 600 /swapfile

# 3. 格式化为 swap 文件系统
sudo mkswap /swapfile

# 4. 立即启用 Swap
sudo swapon /swapfile

# 5. 验证是否生效
free -m

2. 配置开机自动挂载与内核调优

将挂载信息写入 /etc/fstab,确保华为云 ECS 重启后依然生效:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

同时,调整内核的 swappiness 参数(默认通常为 60)。将其调低至 10 或 20,代表优先使用物理内存,仅在物理内存紧张时才动用 Swap,从而兼顾性能与稳定性:

# 临时生效
sudo sysctl vm.swappiness=15

# 永久写入配置文件
echo 'vm.swappiness=15' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

三、 编写自动化巡检与定时清理脚本

为了让服务器长期保持健康状态,我们可以编写一个轻量级维护脚本,交由 Linux 自带的 crontab 定时执行。

1. 创建运维脚本

新建脚本文件 /opt/scripts/auto_maintain.sh:

sudo mkdir -p /opt/scripts
sudo tee /opt/scripts/auto_maintain.sh << 'EOF'
#!/bin/bash
LOG_FILE="/var/log/auto_maintain.log"
echo "========== 维护任务开始: $(date '+%Y-%m-%d %H:%M:%S') ==========" >> $LOG_FILE

# 1. 清理超过 7 天的 systemd 日志
journalctl --vacuum-time=7d >> $LOG_FILE 2>&1

# 2. 清理 /tmp 下超过 10 天未访问的临时文件
find /tmp -type f -atime +10 -delete 2>/dev/null

# 3. 记录当前内存与磁盘剩余情况
echo "[当前内存状态]" >> $LOG_FILE
free -m >> $LOG_FILE
echo "[当前磁盘状态]" >> $LOG_FILE
df -h / >> $LOG_FILE

echo "========== 维护任务结束 ==========" >> $LOG_FILE
echo "" >> $LOG_FILE
EOF

# 赋予可执行权限
sudo chmod +x /opt/scripts/auto_maintain.sh

2. 添加 Crontab 定时任务

设置每周日凌晨 3 点 30 分自动运行一次该清理脚本:

(sudo crontab -l 2>/dev/null; echo "30 3 * * 0 /opt/scripts/auto_maintain.sh") | sudo crontab -

添加完成后,可通过 sudo crontab -l 查看已生效的计划任务列表。


总结

通过对日志体积的定量限制、Swap 缓冲机制的引入以及定时巡检脚本的部署,我们可以大幅降低华为云 ECS 实例在长期无人值守运行下的故障率。这套基础运维操作不依赖任何第三方重型监控组件,非常适合个人开发者与中小型业务服务器作为初始化标准流程执行。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。