在迁移 VPS、排查服务器不稳定、评估主机质量时,仅凭“感觉卡”是远远不够的。真正有价值的,是一份能够在某个时间点完整记录服务器运行状态的“体检报告”。

本文介绍并解析一个实用的 Bash 脚本 —— vps_healthcheck.sh,它的作用是:
在几秒钟内抓取 VPS 的 CPU、内存、磁盘、IO、网络、内核状态,并保存为可追溯的日志文件。

这类脚本广泛用于运维取证、迁移前后对比、主机质量评估等场景。


一、完整脚本(脱敏版)

#!/usr/bin/env bash
set -euo pipefail

# 使用 ISO8601 时间作为日志名,避免覆盖
ts="$(date -Is | tr ':' '-')"
out="/root/vps-health-${ts}.log"

# 所有输出同时显示在屏幕并写入日志
exec > >(tee -a "$out") 2>&1

echo "===== BASIC ====="
date -Is
uname -a
uptime
echo

echo "===== CPU ====="
command -v lscpu >/dev/null && \
lscpu | egrep -i 'Model name|CPU\(s\)|Thread|MHz|Hypervisor|Virtualization' || true
echo

echo "===== MEMORY ====="
free -h
cat /proc/meminfo | egrep 'MemTotal|MemFree|MemAvailable|Cached|Buffers|Slab|SwapTotal|SwapFree' || true
echo

echo "===== TOP RSS ====="
ps aux --sort=-rss | head -n 20
echo

echo "===== LOAD / VMSTAT (1s x 5) ====="
vmstat 1 5
echo

echo "===== DISK ====="
df -hT
lsblk -f || true
echo

echo "===== DISK IO (if iostat exists) ====="
if command -v iostat >/dev/null; then
  iostat -xz 1 5
else
  echo "iostat not found (install package 'sysstat' if needed)."
fi
echo

echo "===== NETWORK ====="
ip -s link
ss -s || true
echo

echo "===== KERNEL WARN (OOM / IO / HANG) ====="
dmesg -T | egrep -i 'oom|killed process|ext4|xfs|nvme|blk|i/o error|reset|hung task' | tail -n 200 || true
echo

echo "Saved to: $out"

二、脚本的核心定位

该脚本并不尝试修复系统,也不对服务器进行任何修改。
它的唯一目标是:

在某一时刻,对 VPS 进行一次完整、可留存的健康快照。

这份快照可以用于:

  • 判断 VPS 是否被超售
  • 诊断是否存在内存耗尽(OOM)
  • 分析磁盘 IO 是否异常
  • 查看是否存在大量异常网络连接
  • 在迁移前后对比主机质量

三、为什么这个日志设计很专业

脚本使用:

exec > >(tee -a "$out") 2>&1

意味着:

所有输出 → 屏幕 + 文件 同步写入

这样可以:

  • 立即查看
  • 长期保存
  • 作为迁移前后的对比证据
  • 作为向 VPS 服务商反馈问题的技术材料

这是标准运维“取证型日志”设计方式。


四、采集了哪些关键指标

1. CPU 与虚拟化环境

通过 lscpu 可判断:

  • 实际 CPU 型号
  • 分配给 VPS 的核数
  • 是否运行在虚拟机中
  • 是否被 KVM / Hypervisor 管理

用于识别 VPS 是否存在严重超售。


2. 内存与 OOM 风险

free -h + /proc/meminfo 可以看到:

  • 实际可用内存
  • cache / slab 占用
  • swap 是否在狂用

这是判断系统是否会因内存压力杀进程的核心依据。


3. 谁在吃内存

ps aux --sort=-rss 会列出:

当前最耗内存的 20 个进程

用来快速定位异常服务或失控容器。


4. 系统是否被卡住

vmstat 1 5 可看:

  • IO wait
  • CPU 抢占
  • swap 抖动
  • 运行队列长度

可判断 VPS 是否处于“假死”状态。


5. 磁盘是否是瓶颈

iostat -xz 显示:

  • await(IO 延迟)
  • util(磁盘是否被打满)
  • 队列堆积

这是判断 VPS 磁盘是否劣质的关键数据。


6. 网络是否异常

ip -s link + ss -s 可以看到:

  • 收发包量
  • 错包
  • 当前连接数

可以识别扫描、攻击、爬虫或连接泄漏。


7. 内核是否偷偷杀进程

dmesg 过滤:

  • OOM killer
  • I/O error
  • hung task

这是解释“服务突然消失”“SSH 掉线”的最重要证据。


五、这个脚本在真实运维中的价值

这个脚本可以把模糊的“VPS 不稳定”转化为:

CPU、内存、IO、网络、内核行为的可量化快照

它特别适合用于:

  • VPS 迁移前后的质量对比
  • 判断服务商是否提供了劣质主机
  • 排查间歇性卡顿和进程消失

结语

vps_healthcheck.sh 不是花哨的工具,而是一个运维级取证脚本
它的意义只有一个:

在关键时刻留下数据,而不是留下猜测。

在任何严肃的服务器运维或迁移过程中,这样的一份“健康快照”,往往比所有主观判断都更有价值。

Leave a Reply

Your email address will not be published. Required fields are marked *