压测与扩容决策:定位 CPU、内存、磁盘、带宽四类瓶颈
正文
每次大促前,客户都会问我同一个问题:"要不要先把配置升上去?"我通常回一句:先压测,别猜。定位腾讯云服务器性能瓶颈这件事,最贵的错误不是发现不了瓶颈,而是没定位就升配——钱花了,慢的地方一点没变,因为瓶颈可能压根不在你升级的那个维度上。
排查思路其实是一句话:先量指标,再分四类。CPU、内存、磁盘、带宽,四个方向各有一组信号,用对命令半小时就能圈定范围,然后再谈纵向升配还是横向扩展。
一、压测方法:用什么工具、打什么指标
压测不是随便打几个请求看看快不快,而是要有目标指标和对照基线。我一般分三层来做。
• 接入层:用 ab、wrk、wrk2 或 JMeter、Locust 打 HTTP 接口,关注 QPS、P95/P99 延迟、错误率。wrk 适合高并发短请求,JMeter 适合带业务逻辑和参数化的场景。
• 系统层:用 sysbench 压 CPU 和内存、fio 压磁盘随机与顺序读写、iperf3 压网络吞吐。这一步是给你的机器画"能力上限"的基线。
• 业务层:真实链路压测,包含数据库、缓存、外部接口,看端到端延迟在哪一段突然抬升。
监控侧同步开着 top、vmstat、mpstat、iostat、free、ss 这几条命令,或者直接用云监控看历史曲线。压测的价值不在那个 QPS 数字,而在压力上来时哪个指标先撞墙——第一个先饱和的资源,就是你的瓶颈。
压测的两条纪律
第一条,别拿生产当靶子。压测要把数据库、缓存、外部依赖隔离出来,至少用影子库或只读流量,否则压出瓶颈的同时也把线上拖垮了。第二条,压测结果要带环境信息:同一份代码在测试机和生产机的表现可能差一倍,规格族、云硬盘类型、公网带宽上限不同,基线不可直接套用。我吃过这个亏,测试机是轻量应用服务器、生产机是标准型,按测试结果估的容量,上线就打了脸。
压测还要压到瓶颈真的出现为止。很多人只压到日常流量的两倍就收手,结果所有指标都还有余量,什么结论也得不出。正确做法是逐步加压,直到某个指标先撞墙、错误率开始抬升,那个拐点才是你的容量边界,也是扩容决策的数字依据。
二、四类瓶颈的定位信号
同一个"网站慢",落到四类资源上表现完全不同。下面这张表是我排障时对照用的速查。
瓶颈类型 关键指标 常用工具 典型信号 扩容方向
CPU us 用户态、sy 内核态、si 软中断、load average top、mpstat、vmstat 核数跑满、load 持续高于核数、上下文切换激增 升计算型规格或加机器横向扩展
内存 available、swap 使用、OOM 记录 free、vmstat、dmesg available 接近零、频繁换页、进程被 OOM Kill 升内存型规格、排查内存泄漏
磁盘 利用率、await、队列深度、IOPS、吞吐 iostat -x、iotop、fio 利用率长期高位、await 明显上升、随机 IOPS 触顶 换 SSD 或增强型 SSD、拆库分表
带宽 出带宽峰值、重传率、PPS nload、iftop、netstat -s 出带宽打满、重传增加、响应普遍变慢 升级带宽、接 CDN 分流、多机负载均衡
连接数 TIME_WAIT 数量、文件描述符、端口占用 ss -s、ulimit、sysctl 新建连接失败、端口耗尽、连接队列溢出 调内核参数、加机器、上 CLB
看着像五类,其实连接数常和带宽并在一起看,真正的"四象限"还是 CPU、内存、磁盘、带宽。
内存这个维度最容易被误判。Linux 会把空闲内存拿去做页缓存,free 里 free 一列偏低不代表内存吃紧,要看 available;只有 available 逼近零、并且开始频繁使用 swap,才算真的压力上来。跑容器或 Java 应用的还要把堆设置和容器 limit 对齐,否则会出现一边报内存不足、一边机器明明还有余量的怪现象,这类问题在压测时最容易暴露。
云硬盘这块有个反直觉的点:增强型 SSD 的 IOPS 和吞吐上限不是固定的,会随容量阶梯增长,容量买小了,IOPS 也跟着被限制住。扩容前先算清业务需要多少 IOPS 和吞吐,再倒推盘该买多大。另外别忽略实例本身的内网带宽和 PPS 上限,同一规格族的实例有明确的内网收发能力,压力到顶时表现和公网带宽打满很像,但根子在实例内网而非公网出口。
CPU 还要多说一层:看 top 时别只盯总占用,要分 us、sy、si。us 高说明业务代码算得狠,考虑优化算法或加缓存;sy 高往往是系统调用频繁;si 高多半是小包太多,属于网络层面的问题,光升 CPU 参数没用。用突发性能实例的客户还要留意 CPU 积分,积分耗尽会被降频,表现为"配置够但就是跑不动",这在轻量应用服务器上也时有发生。
三、四象限决策:先定位再扩容
圈定瓶颈后,别急着下单升配,先问一句:这是资源不够,还是配置没调好?
• 资源型瓶颈:压测基线就低,比如单核算力确实带不动,随机 IOPS 确实到顶。这类只能靠升配或加机器解决。
• 配置型瓶颈:机器能力还有余量,但被错误的参数卡住。比如数据库没建索引、连接池太小、文件描述符默认值不够、内核网络参数没调。
同样的慢,资源型要花钱,配置型只要改配置,先分清类型再动手能省一大笔。 我见过不少客户直接翻倍升配,最后发现问题出在 MySQL 少了两个索引上,机器一直是无辜的。
判断资源型的另一个技巧是看压力曲线:随着并发上升,如果某个指标先到平台期、延迟随之陡增,那就是它的天花板;如果各指标都还有余量却整体变慢,大概率是配置或代码链路问题。
分类型之外还有优先级:先修配置型问题,因为它几乎零成本;配置榨干后仍有缺口,再上资源型扩容。判断顺序上,我一般先看带宽和磁盘,这两类最容易一眼看出饱和;再看 CPU 的分项;最后才怀疑内存,因为内存瓶颈往往表现为延迟抖动和 OOM,信号没那么直白。
四、扩容路径:纵向升配还是横向扩展
定位清楚后,扩容有两条路,选择标准是"能不能让多台机器一起干活"。
• 纵向升配:把单机规格换大,比如标准型换计算型或内存型,或把云硬盘换成增强型 SSD。优点是改造成本低、不用动架构;缺点是多数机型升配要停机、部分机型不支持随意降配,且单机总有上限。
• 横向扩展:用负载均衡 CLB 挂多台,配合弹性伸缩按负载自动增减。前提是业务无状态化,会话和缓存外置到 Redis,文件放 COS,否则加机器也带不来线性提升。
横向扩展还有个隐藏前提:数据层不能被单机卡住。应用层加十台机器,如果后端的 MySQL 还是单机,瓶颈会原地转移到数据库上,前端加得越多,数据库被打得越狠。所以横向扩展通常要配套读写分离、加缓存或分库分表,否则就是白花钱。弹性伸缩 ASG 适合有明显波峰波谷的业务,可以按 CPU 或带宽阈值自动增减实例,夜里自动缩容省成本;但伸缩要有预热时间,冷启动几分钟内新机器顶不上流量,关键业务别只指望它兜底。
纵向升配也有坑:不少机型不支持随意降配,升上去容易、降回来难,而且升降配多数需要停机重启,对连续性要求高的业务要挑维护窗口;如果业务本身是无状态的,横向加机器通常比纵向升配更平滑,还能顺便拿到冗余。
带宽这条要单独拎出来。腾讯云公网出带宽是主要受限方向,按带宽计费适合流量平稳的业务,按流量计费适合波峰波谷明显的场景;如果出口被打满,先看是不是静态资源在直连源站,把图片、附件迁到 COS 再用 CDN 分发,往往比直接升带宽省钱得多。多台机器时用 CLB 分摊,比单机堆高带宽更有弹性。
如果自己拆不明白是资源型还是配置型,找一家有排障经验的腾讯云代理帮着看一遍监控和压测报告,通常比盲目加配置更快落地——不过要记得,先有基线数据,咨询才有意义。
FAQ
Q:服务器 CPU 高,一定是 CPU 不够吗?
A:不一定。先分 us、sy、si:用户态高是代码吃算力,内核态高是系统调用多,软中断高多是小包流量问题。用突发性能实例还要看 CPU 积分是否耗尽,别误判成配置不足。
Q:磁盘慢,是看 IOPS 还是看吞吐?
A:看业务 IO 模型。数据库多为随机小 IO,重点看 IOPS 和 await;日志、备份是大块顺序 IO,重点看吞吐。用 iostat -x 的利用率和 await 配合判断,别只看一个数。
Q:公网带宽被打满有什么表现?
A:响应普遍变慢、连接超时增多、netstat -s 里重传上升,云监控出带宽曲线顶在峰值。先确认是不是静态资源直连,用 COS 加 CDN 分流通常比直接升带宽更划算。
Q:什么时候该横向加机器而不是升配?
A:业务无状态、能通过负载均衡分摊时才横向扩展。会话和缓存已外置、加机器能带来接近线性的提升,就优先横向;如果只能单机扩展,再考虑纵向升配。
Q:升配之后还是慢怎么办?
A:回到压测看瓶颈是否转移。单点瓶颈解开后,下一个最弱环节会暴露出来,比如 CPU 够了但磁盘 IOPS 又到顶。扩容是迭代过程,不是一次到位。
结语
给你一套可执行的流程:先压测拿到基线,用 top、iostat、free、ss 四组命令对照表格圈定是 CPU、内存、磁盘还是带宽瓶颈;再判断是资源型还是配置型;最后才决定纵向升配还是横向扩展。记住这个顺序:指标先行、定位其次、扩容最后,跳过前两步的升配多半是浪费钱。今天就做一件事——给核心业务跑一次半天压测,把四类指标的平台期记下来,顺带把带宽和磁盘这两类最容易饱和的指标设成云监控告警,等到真出问题那天,你会庆幸手里有这份基线和提前埋好的提醒。
如果需要更深入咨询了解可以联系全球代理上TG:jinniuge 他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。
