Appearance
新 VPS 到手,怎么系统地验一遍
便宜 VPS 基本靠抽。同样标称 2C4G100G, 我实测过一台磁盘能跑 113000 IOPS, 另一台只有 23 IOPS 左右,差了快 5000 倍,后者连 PostgreSQL 都喂不动。参数一模一样,拿到手好不好用,全看你分到宿主机哪个节点、邻居闹不闹。
所以新机到手别急着上业务。花二十分钟系统地验一遍,把“验收期”这个能退款的窗口用满。这篇是我自己反复在用的清单,分四块:性能、IP 质量、网络出口、安全加固。每一项我都先说清“测的是什么”,而不是甩条命令就完事。你得知道那个数字为什么能暴露一台烂机,换台机器、换个用途,你自己才会判断该看哪几行。
下面的数据参照来自我实测过的两台美西机:一台 RackNerd 6C6G(洛杉矶 DC03),一台 DartNode 便宜档,对照挺明显。
1. 性能检测
性能这块要回答的其实就一个问题:商家有没有超卖,把你和一堆邻居塞在同一份物理资源上抢。标称参数是名义配额,实测才是你真能拿到的。下面每个指标都是从不同角度捅超卖。
命令我都标了来源:系统自带的直接用,需要装的开源工具给了项目地址和安装方式。别照抄网上来路不明的一键脚本,跑之前扫一眼源码。
1.1 CPU 型号与虚拟化类型
先搞清你到底分到了什么,看两件事:物理 CPU 的代际,还有虚拟化类型。
代际决定单核性能。老的 Intel Xeon E5-2680v4(2016)单核 sysbench 只有 523 分左右,新的 AMD Ryzen 9950X(2024)能到 6127, 差 12 倍。编译、加密、任何吃单核的活,代际直接决定体感。
虚拟化类型决定你的权限边界。KVM 是完整虚拟机,能改内核参数(sysctl)、装内核模块、开 BBR; OpenVZ / LXC 是共享宿主内核的容器,很多参数你根本改不动,连 BBR 都开不了。买之前就该确认是 KVM。
lscpu 系统自带(util-linux),直接跑:
bash
lscpu看三行:Model name(CPU 型号,拿去搜代际和年份)、CPU(s)(vCPU 数量,核对跟标称对不对得上)、Hypervisor vendor / Virtualization type(是不是 KVM)。
型号落在 E5-26xx v3/v4 这类 2014–2016 老 U、又要吃单核,慎;虚拟化不是 KVM 是 OpenVZ, 后面的内核调优(BBR 那些)大概率做不了,当容器机对待。
有个坑:有些商家标 KVM, lscpu 却露出 OpenVZ 特征(比如看不到独立的 Hypervisor vendor)。以 lscpu 实测为准,别信商品页。
1.2 CPU steal
steal(%st)是你的 vCPU 想干活、但物理核被同宿主的邻居占着、hypervisor 让你干等的时间百分比。这是超卖最诚实的一个数字:商家在一颗物理核上塞了多少客户,你的 steal 就有多高。空载时你几乎不跟人抢,steal 应该趋近 0; steal 常年高,说明这颗核上人太多。
即时看一眼(vmstat 来自 procps,多数发行版预装,最小镜像没有就 apt install procps):
bash
vmstat 1 5盯最右边的 st 列,连续 5 秒都该是 0。
但即时值会骗人。超卖真正咬人是在大陆晚高峰、邻居全部满载的时候,你白天测一眼全 0 说明不了问题。想测准,就持续采样,从 /proc/stat 差分算 %steal, 挂一晚上覆盖晚高峰:
bash
# 每 60 秒从 /proc/stat 差分算一次 steal%,不装 sysstat 也能跑
while true; do
read _ u n s i w irq sirq st _ < /proc/stat
total=$((u+n+s+i+w+irq+sirq+st)); busy=$st
sleep 60
read _ u2 n2 s2 i2 w2 irq2 sirq2 st2 _ < /proc/stat
total2=$((u2+n2+s2+i2+w2+irq2+sirq2+st2))
echo "$(date '+%F %T') steal%=$(awk "BEGIN{print ($st2-$busy)*100/($total2-$total)}")"
done跑一晚,回头看晚高峰那几个小时的 p95 / max。
红线:空载 steal 该 ≈0; 持续采样后,晚高峰 p95 steal 超过 5–10% 就是超卖,开工单要求重摇节点或换机房,不改善就在退款期内退。参照一下,我见过的灾难节点 steal 常年 59.71%, 好节点全程 0。
注意 steal 是单节点的运气,不是机房通病。同一家、同一个机房,你重开一台可能就正常了,所以是“重摇”,不是拉黑这家。
1.3 磁盘 4k 随机读写
IOPS 就是每秒能完成多少次独立的小块 I/O。这里必须用 4k 随机,而不是顺序大文件,原因很简单:数据库、Redis、日志、网站的真实负载全是零散的小块随机 I/O, 不是从头到尾读一个大文件那种理想场景。顺序带宽的数字很好看,但骗人;4k 随机 IOPS 才是真实服务跑起来的样子,也最能把超卖存储和廉价盘打回原形。
用 fio(开源,github.com/axboe/fio;没有就 apt install fio):
bash
# 4k 随机读
fio --name=randread --ioengine=libaio --direct=1 --bs=4k --rw=randread \
--numjobs=4 --iodepth=32 --runtime=12 --time_based --group_reporting
# 4k 随机写(rw 换成 randwrite)
fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --rw=randwrite \
--numjobs=4 --iodepth=32 --runtime=12 --time_based --group_reporting看输出里的 IOPS= 和 lat(延迟)。
红线:上千 IOPS 是能用的底线,NVMe 后端该在十万量级。参照一下,RackNerd 那台实测 113k IOPS / 约 440 MiB/s / 延迟 1.13ms 左右,是 NVMe 级;DartNode 便宜档我见过 23 IOPS 左右(社区那句“9Gbps 网络火力 vs 5 IOPS 磁盘吸管”说的就是它),差了快 5000 倍,这种盘喂不动任何数据库,只配当一次性中转节点。
这里有个坑,rotational 是 virtio 假象。你可能会去看这个:
bash
cat /sys/block/vda/queue/rotational # 报 1 看着像机械盘报 1 不代表是机械硬盘。virtio 虚拟磁盘不透传底层真实介质属性,这个值经常是假的。别信它,一切以 fio 实测的随机 IOPS 为准。113k IOPS 摆在那,后端不可能是机械盘。
1.4 内存 / 磁盘空间 / swap
看三样:标称的内存是不是真给到了、磁盘空间对不对、有没有 swap 兜底。对“多个服务挤一台”的机器,先爆的通常是内存不是 CPU, 所以 RAM 余量比核数更该盯。下面这几个都系统自带:
bash
free -h # 总内存 / 已用 / 可用,核对跟标称对不对
df -h / # 根分区总量 / 已用
swapon --show # 有没有 swap、多大free -h 的 total 明显低于标称(比如标 6G 实际给到 5.3G 以下,扣掉一点点是正常的),存疑;完全没有 swap、内存又不宽裕,自己加个 swapfile 兜底。
1.5 一键兜底,顺便交叉验证
上面是手动逐项测,好处是你知道每个数字什么意思。想快速拿个总览、跟手测结果对一下,可以再跑个综合跑分脚本:
bench.sh(开源,github.com/teddysun/across):老牌综合脚本,一次出 CPU、内存、磁盘 IO、到各地节点的下载速度。
bash
wget -qO- bench.sh | bashNodeQuality(开源,github.com/LloydAsp/NodeQuality):较新,在 chroot 沙箱里整合了 xykt 的 IP 质量、融合怪性能、nexttrace 路由,一把梭还无痕。
bash
bash <(curl -sL https://run.NodeQuality.com)上面地址我按当前官方仓库核过。但这类
bash <(curl ...)脚本会更新、域名也可能换,跑之前扫一眼源码、以项目仓库为准,别照抄网上过期的命令。
一键脚本方便,但别拿它替代手测。综合脚本给的常是顺序读写或者简化指标,fio 4k 随机加上持续 steal 采样,才是真能戳穿超卖的两把刀。两边对得上,结论才算数。
2. IP 质量检测
性能验的是“这台机跑得动吗”,IP 质量验的是“这个 IP 能用吗”。IP 干不干净跟硬件没关系,但能直接毁掉你的用途:被拉黑的 IP 发不出邮件,被风控标记的上不了目标网站,被墙的 IP 国内根本连不上。
下面这些,xykt/IPQuality(开源,github.com/xykt/IPQuality)一个脚本基本全覆盖:基础信息、IP 类型、风险评分、风险因子、流媒体解锁、邮局检测六大模块,外加 400+ 黑名单库检测。
bash
bash <(curl -Ls https://IP.Check.Place)跑完对着输出看,下面逐块说每个数字是什么意思、红线在哪。地址以项目仓库为准,跑前扫一眼源码。
2.1 IP 纯净度 / 风险分 / 归属类型
对应脚本的“风险评分 / IP 类型”模块。看这个 IP 在各大风控数据库眼里是什么形象。风险分(比如 Scamalytics 的 fraud score)越低越干净,分高说明这 IP 历史上跟滥用行为沾过边,很多网站会直接拦。归属类型分住宅、机房、商业,VPS 天生是机房 IP, 但有些机房段被标记得更重。还有是不是原生 IP, 就是 IP 注册地和机器物理位置一不一致,影响流媒体和风控判定。风险分低、归属清晰、没被标成已知代理/VPN 段,就算干净。
2.2 邮件黑名单(RBL)
对应脚本的“邮局检测 + 黑名单”模块。看这个 IP 有没有被 Spamhaus 那些垃圾邮件黑名单(RBL)收录。只要你打算用这台机发任何邮件,哪怕只是服务通知,这步就必做。被 RBL 收录的 IP, 邮件直接进垃圾箱或者被拒收。主流 RBL 全部 not listed 才算过关,命中任意一个,基本告别自建邮件。
2.3 流媒体 / ChatGPT 等解锁
看从这个 IP 能不能正常访问 Netflix、Disney+、ChatGPT 这些有区域或风控限制的服务。它们对机房 IP 封得很凶,同一家商家不同 IP 结果都可能不一样。按你实际要用的服务看对应结果就行,用不到就跳过,别为不需要的解锁纠结。
上面那个 xykt/IPQuality 已经带流媒体解锁检测;想要更细的分区解锁结果,可以再跑专测的 lmc999/RegionRestrictionCheck(开源,github.com/lmc999/RegionRestrictionCheck):
bash
bash <(curl -L -s check.unlock.media)2.4 是否被墙(大陆三网可达性)
看这个 IP 从中国大陆的电信、联通、移动能不能直连。廉价美西机的 IP 段经常整段在大陆被墙,但这里要分两种情况:
如果你直连这台机(SSH 或者网站直接指过去),被墙就是致命的。如果你走中转(国内流量先过一台优化线路的跳板机再进这台),那这台机自己的 IP 被墙不影响终端用户,只影响你从国内直接 SSH 上来管机,这时候走跳板管就行。
这步不是在 VPS 上跑脚本,而是从国内视角测:用在线的三网 ping / tcping 站点(如 itdog.cn、ping.pe 这类,以站点当前可用为准)测目标 IP 的可达性和丢包,再结合你是直连还是中转判断严重性,别一看红就慌。
3. 网络出口检测
IP 质量看的是“这个 IP 的身份”,网络出口看的是“数据从这台机出去、回到用户,走的什么路、有多快”。对回国访问,回程路由往往比带宽数字更决定体感。
3.1 三网回程路由(最该先看)
看数据从这台机回到中国时,在中国境内走的哪条骨干线路。这条路的质量直接决定晚高峰卡不卡。优质回程是 CN2 GIA、联通 9929、电信 4837 这些优化线路,晚高峰稳;普通回程是 163 骨干直连,晚高峰经常拥塞掉速。回程比去程重要,因为大部分场景(网站、下载)都是服务器往用户推数据,走的是回程。
用 nexttrace(开源,github.com/nxtrace/NTrace-core,带地理和 AS 信息),从 VPS 往国内的电信、联通、移动测试 IP 各跑一次,看中国境内第一跳进的是哪条线:
bash
# 安装 nexttrace(开源)
curl -sL https://nxtrace.org/nt | bash
# 分别 trace 三网(目标换成三网各自的测试 IP)
nexttrace <电信目标IP>
nexttrace <联通目标IP>
nexttrace <移动目标IP>(besttrace 也能做同样的事,但它是 IPIP.net 的闭源客户端 ipip.net/product/client.html,能用开源的就用 nexttrace。)
路径里出现 59.43.x.x(CN2)这类优化段,就是好线;全程 163 普通骨干,就是普通直连。这台机自己的线路好不好,决定它能不能直接给国内用;走中转架构的话这项可以放宽,国内侧质量由跳板机的线路决定。
3.2 带宽 / 延迟 / 丢包
看出口的实际吞吐(带宽)、到目标点的往返延迟(RTT)、还有路径稳不稳(丢包)。标称 '1Gbps' 是端口速率,实际能跑多少得测。speedtest 有两个:Ookla 官方 CLI(闭源,speedtest.net/apps/cli)和开源的 speedtest-cli(github.com/sivel/speedtest-cli,pip install speedtest-cli);mtr 是开源老工具,apt install mtr 即可。
bash
# 带宽:装 speedtest-cli,或者直接用第 1.5 节的综合脚本自带的测速
speedtest
# 延迟 + 丢包 + 逐跳稳定性:mtr 比单纯 ping 信息量大得多
mtr -rwc 100 <目标IP>mtr 跑 100 个包,看每一跳的 Loss% 和 Avg 延迟,中间某跳持续丢包就是那一段的问题。小水管(100–500Mbps)建站够用但下载吃力;带宽不达标或者某跳持续丢包,记下来当退款依据。
3.3 中转架构下的②段内网延迟(如果用得上)
如果你的架构是“国内 → 跳板机 → 这台业务机”,那跳板机到业务机这一段(②段)的内网延迟,是每个请求都要付的固定成本。两台机同城(比如都在洛杉矶)时这段能压到亚毫秒,基本等于内网;放两个大洲就变成跨洋 150ms 左右,拖垮每个请求。
从跳板机 ping 业务机的内网/直连 IP:
bash
ping -c 10 <业务机IP>同城该是亚毫秒到个位数毫秒、0% 丢包。参照一下,RackNerd(LA DC03)到同城 DMIT-LA 我实测是 rtt 0.677/0.812/1.009ms、0% 丢包,基本等于内网。选业务机的时候优先选离跳板机同城的机房,就是为了压这一段。
4. 安全 / 防火墙(上业务前必做)
前三块是“验收、决定留不留”,这一块是“决定留下、上业务之前的基础加固”。一台开在公网、默认配置的新机,几分钟内就会被全球扫描器开始爆破 SSH。下面是最小必做集,不求花哨,先把最常见的攻击面关掉。
4.1 SSH 加固:key-only, 断掉密码爆破
密码登录是被爆破的头号入口。改成只认密钥,爆破就没了着力点。
顺序别反:先确认你的公钥已经在机器上(能用 key 登进去),再改配置,不然容易把自己锁在门外。编辑 /etc/ssh/sshd_config:
PermitRootLogin prohibit-password # 禁 root 密码登录(仍可用 key)
PasswordAuthentication no # 全局禁密码,只认 key
PubkeyAuthentication yes改完 sudo systemctl restart ssh(有的系统是 sshd)。别关当前会话,另开一个新终端验证 key 能登进来,确认没问题再放心。
改 SSH 端口有没有用有争议:它挡不住有针对性的攻击,只能减少日志噪音。想改就改,不改靠 key-only 加 fail2ban 也够。
4.2 防火墙:ufw 最小放行
默认所有端口都可能对外暴露。防火墙的原则是默认全拒、只放你真正要用的。ufw 是开源工具,Ubuntu 一般预装(没有就 apt install ufw),最省心:
bash
sudo ufw default deny incoming # 默认拒绝所有入站
sudo ufw default allow outgoing # 允许所有出站
sudo ufw allow 22/tcp # 放行 SSH(改过端口就填新端口)
sudo ufw allow 80,443/tcp # 建站才放,不建站别开
sudo ufw enable
sudo ufw status verbose # 核对规则ufw enable 之前一定先 allow 掉 SSH 端口,不然规则生效那一瞬间就把自己关门外了。
4.3 fail2ban: 自动封爆破源
key-only 已经挡住了爆破成功的可能,但日志里还是会堆满尝试。fail2ban(开源,github.com/fail2ban/fail2ban)扫日志,对反复失败的 IP 自动临时封禁,清掉噪音,也挡住少数针对弱配置的攻击。
bash
sudo apt install fail2ban
# 复制默认配置再改,别直接改 jail.conf(升级会被覆盖)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd # 看 sshd jail 生效没、封了几个默认对 SSH 生效就够,建站再按需加对应 jail。
4.4 BBR + fq: 顺手开,换点吞吐
这项严格说是网络优化不是安全,但属于“上业务前顺手做掉”的一次性设置。BBR 是 Google 的拥塞控制算法,在有丢包的跨境链路上,吞吐通常比默认的 cubic 明显好。很多廉价机默认没开。
需要 KVM(容器机改不了,见第 1.1 节)。持久化写进 /etc/sysctl.d/, 重启不丢:
bash
cat | sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sudo sysctl --system
# 验证:两行都该回显 bbr / fq
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc输出还是 cubic, 说明内核太老或者虚拟化不支持,回去确认第 1.1 节,是不是 KVM、内核够不够新。
5. 一页速查表
上面每项都展开讲了含义,实操的时候对着这张表跑就行。红线参照来自实测。
| 维度 | 项 | 命令 | 红线 / 判据 |
|---|---|---|---|
| 性能 | CPU 代际 / 虚拟化 | lscpu | 非 KVM 慎;老 E5 又吃单核慎 |
| steal(即时) | vmstat 1 5 | 空载 st 该 ≈0 | |
| steal(持续) | /proc/stat 差分采样一晚 | 晚高峰 p95 > 5–10% = 超卖 | |
| 磁盘 4k 随机读写 | fio --bs=4k --rw=randread/randwrite --direct=1 | 底线上千 IOPS; NVMe 该十万级 | |
| 内存 / 盘 / swap | free -h / df -h / swapon --show | 内存明显缩水存疑 | |
| 综合交叉验证 | bench.sh(teddysun/across) / NodeQuality(LloydAsp) | 跟手测对得上才算 | |
| IP 质量 | 纯净度 / 风险分 / 归属 / 黑名单 | xykt/IPQuality:bash <(curl -Ls IP.Check.Place) | 风险分低、归属清晰、RBL 全 not listed |
| 邮件黑名单 | 同上脚本的邮局检测模块 | 主流 RBL 全 not listed | |
| 流媒体 / ChatGPT 解锁 | lmc999/RegionRestrictionCheck:bash <(curl -L -s check.unlock.media) | 按实际用途看 | |
| 是否被墙 | 在线三网 ping 站点(itdog.cn 这类) | 直连要通;中转可放宽 | |
| 网络出口 | 三网回程路由 | nexttrace(nxtrace/NTrace-core) 打三网 | 看是否 CN2/9929/4837;中转可放宽 |
| 带宽 / 延迟 / 丢包 | speedtest / mtr -rwc 100 | 某跳持续丢包记为退款依据 | |
| ②段内网延迟(中转) | ping -c 10 <业务机> | 同城该亚毫秒 / 0% 丢包 | |
| 安全 | SSH 加固 | 改 sshd_config: key-only、禁 root 密码 | 先验 key 能登再禁密码 |
| 防火墙 | ufw 默认拒绝 + 最小放行 | enable 前先 allow SSH | |
| fail2ban | apt install fail2ban + jail.local | fail2ban-client status sshd 生效 | |
| BBR + fq | 写 /etc/sysctl.d/99-bbr.conf | sysctl 回显 bbr/fq |
最后说句方法论上的话。这套清单值钱的地方不在某条具体命令,而在两点:一是趁退款期把机器往死里验,烂节点趁早退,别等上了业务才发现;二是分清哪个轴是你真吃的,IO 绑定的服务别为顶级单核 CPU 付溢价,该花钱的是内存、带宽和商家可靠性。指标背后的意思搞懂了,换台机、换个用途,你自己就会判断该盯哪几行。