服务端压力测试怎么做
公司新上线了一个电商平台,刚搞完双十一大促,系统就崩了。客服电话被打爆,用户抱怨订单提交不了。事后排查发现,服务器在高峰期扛不住并发请求。这种问题其实在上线前做一次完整的压力测试就能避免。
明确测试目标
不是所有系统都一样,得先想清楚要测什么。比如你是个电商后台,重点就是订单接口能不能撑住万人抢购;如果是内容平台,可能更关心文章加载速度和图片上传稳定性。目标定好了,才知道用什么工具、模拟多少用户、关注哪些指标。
选对工具是关键
市面上常见的工具有 JMeter、Locust 和 wrk。JMeter 图形化操作,适合新手,能模拟登录、加购物车这种复杂流程。Locust 基于 Python,写脚本灵活,适合定制化场景。wrk 性能强,命令行运行,适合做高并发短请求的压测。
比如用 Locust 写个简单脚本:
from locust import HttpUser, task
class WebsiteUser(HttpUser):
<task>
def view_product(self):
self.client.get("/product/1001")
</task>
<task>
def add_to_cart(self):
self.client.post("/cart", {"product_id": 1001, "quantity": 1})
</task>
启动后就能看到每秒处理多少请求,失败率多少,响应时间有没有飙升。
真实模拟用户行为
别光盯着单个接口猛刷。真实用户不会一直访问同一个页面,他们会浏览、点击、停留、退出。压测时要加入随机等待时间,混合不同接口调用比例,甚至模拟网络延迟。这样得出的数据才靠谱。
监控不能少
跑压测的同时,得盯着服务器 CPU、内存、磁盘 IO 和数据库连接数。有时候接口没超时,但数据库锁死了,或者 Redis 连接池耗尽,这些问题只有结合系统监控才能发现。可以用 Prometheus + Grafana 搭套监控面板,实时看数据波动。
逐步加压找出瓶颈
一开始就上五千并发,服务器直接宕机,那等于白测。应该从几百用户开始,慢慢往上加,观察响应时间和错误率的变化。当响应时间明显变长或错误增多时,那个临界点就是当前系统的承载极限。再查日志、看堆栈,定位是代码问题还是配置太低。
压测完记得复原
测试数据别留在生产环境里,尤其是模拟下单、支付这类操作。压测结束后清理临时数据,关闭测试开关,避免影响真实业务。之前有团队压测完忘了关优惠券发放逻辑,结果半夜被自动任务刷了几万张券,闹出大笑话。
定期做压测其实就跟体检一样,不发病也得查一查。尤其在大促前、版本更新后,花一天时间跑一遍,心里才有底。系统稳了,运维睡觉都踏实。