深色模式
云服务器 ECS 选购
摘要:选云服务器不是「越贵越好」,而是让 CPU、内存、磁盘 IO、带宽四项匹配你的真实负载。本文给出规格/镜像/磁盘的选型方法,以及上线前压测和事后调规格的实操命令。
适用环境
bash
# 一台已创建的 Linux 云服务器(用于跑选型压测)
nproc; free -h; lsblk
cat /etc/os-release | head -31
2
3
2
3
操作步骤
一、按负载类型定规格族
先判断你的应用属于哪一类,再选对应规格族(各家命名不同,但都分这几族):
| 负载类型 | 特征 | 选型建议 |
|---|---|---|
| 通用 Web / 中小数据库 | CPU 与内存都不极端 | 通用型,CPU:内存 ≈ 1:4 |
| 计算密集(转码、编译、AI 推理) | CPU 长期高位 | 计算型,1:2 |
| 内存密集(Redis、Java 大堆、ES) | 内存先吃满 | 内存型,1:8 |
| 突发型(个人站、测试环境) | 平时很闲偶尔很忙 | 突发性能实例(注意 CPU 积分) |
二、用真实压测决定规格,而不是拍脑袋
先在现有机器上采集基线:
bash
# CPU 与负载
vmstat 1 5
# 磁盘 IO 能力(顺序写)
dd if=/dev/zero of=/tmp/t bs=1M count=1024 oflag=direct 2>&1 | tail -1
# 磁盘随机 IO(更能代表数据库)
fio -name=rand -ioengine=libaio -rw=randwrite -bs=4k -size=1G -runtime=30 -time_based -filename=/tmp/fio
# 内存带宽
free -h && cat /proc/meminfo | grep -E "MemTotal|MemAvailable"1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
压测应用侧(以 Nginx 为例):
bash
# 安装压测工具
sudo apt install -y apache2-utils
# 100 并发、共 10000 请求
ab -c 100 -n 10000 http://127.0.0.1/
# 观察瓶颈在哪:top 看 CPU,iostat -x 1 看磁盘 %util,sar -n DEV 1 看带宽1
2
3
4
5
2
3
4
5
三、镜像选择
bash
# 常见三类镜像
# 1) 官方公共镜像:干净、可控,适合自定义程度高的场景
# 2) 市场镜像(含预装软件):开箱即用,注意来源是否可信
# 3) 自定义镜像:把已调优的机器做成镜像,用于批量复制与环境一致性1
2
3
4
2
3
4
建议:生产环境以自定义镜像为主干。做法是先在公共镜像上完成基线配置(内核参数、监控 agent、日志 agent、安全基线),再打镜像,之后所有机器从此镜像创建。
bash
# 打镜像前清理机器指纹(重要!否则克隆出的机器 SSH host key 相同)
sudo rm -f /etc/ssh/ssh_host_*
sudo truncate -s 0 /var/log/wtmp /var/log/btmp 2>/dev/null
sudo cloud-init clean --logs1
2
3
4
2
3
4
四、磁盘规划
bash
# 常见云盘类型与用途
# - 普通/高效云盘:开发测试、低频访问
# - SSD 云盘:绝大多数生产场景
# - 增强型 SSD / 本地 NVMe:数据库、日志这类高 IO 场景(注意本地盘不保证持久)
# 分区建议:系统盘 40-100G,数据盘独立挂载
sudo mkfs.xfs /dev/vdb
sudo mkdir -p /data
sudo mount /dev/vdb /data
echo "/dev/vdb /data xfs defaults,noatime 0 0" | sudo tee -a /etc/fstab1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
危险
mkfs 会清空目标盘全部数据。执行前务必用 lsblk -f 确认设备名,云厂商控制台里的数据盘与系统盘设备名可能并非 /dev/vdb。
五、上线后按需调整规格
bash
# 云厂商通常支持停机变配:先停实例 → 控制台改规格 → 启动
# 变配前务必确认数据盘不会随系统盘释放1
2
2
验证
- [ ] 压测期间 CPU、内存、磁盘
%util、带宽四项中至少有一项接近瓶颈,说明规格选得合理(四项都很闲说明买大了) - [ ]
lsblk显示数据盘已独立挂载且在/etc/fstab中持久配置 - [ ]
df -h /data正常,重启后仍自动挂载 - [ ] 从自定义镜像新建一台机器,SSH 登录时 host key 与母机不同
常见坑
- 只看 CPU 核数:同样的核数,不同规格族的主频和网络能力差别巨大,数据库尤其容易卡在网络与 IO 上。
- 突发实例跑生产:CPU 积分耗尽后性能断崖式下降,表现为「白天正常夜里卡」。
- 系统盘塞数据:系统盘到期或重建时数据跟着没了,数据必须放独立数据盘。
- 忘记改默认带宽上限:控制台默认带宽可能只有 1 Mbps,压测时怎么都上不去。