你有没有遇到过这样的情况:线上教学平台正上着直播课,突然卡住,学生画面全黑,老师声音断断续续;或者后台统计系统凌晨三点开始报错,日志里满屏超时,可一刷新又好了——没人知道啥时候再崩。
稳定性不是“不宕机”,而是“扛得住折腾”
很多人把稳定性测试等同于“看看服务能不能启动”。其实不是。它更像给服务器做一次“压力耐力跑”:连续跑 48 小时,中间穿插突发流量、网络抖动、磁盘缓慢、依赖服务短暂失联……看它会不会喘不上气、乱丢数据、或者自己把自己锁死。
几个接地气的测试动作,马上就能试
不用等大工具上线,先从这些小切口入手:
① 持续 ping + curl 轮询:写个简单脚本,每 5 秒请求一次登录接口,记录响应时间与状态码。跑一整晚,导出数据画个折线图,高峰段延迟跳变明显?那就要查是数据库连接池不够,还是缓存穿透了。
while true; do
curl -s -o /dev/null -w "%{http_code}\t%{time_total}\n" https://api.netclass.com/v1/login -H "X-Test: stable" >> stability.log
sleep 5
done② 模拟弱网环境:用 tc(Traffic Control)在测试机上加 300ms 延迟 + 5% 丢包,再打开网页或 App 测操作流畅度。很多前端只处理了“加载中”,没处理“加载一半断了”,结果白屏卡死。
③ 杀进程不打招呼:服务跑着,直接 kill -9 主进程,看它能否自动拉起,且不丢失正在进行的上传任务或未提交的表单数据。真实世界里,OOM killer、宿主机重启、K8s 驱逐都比“优雅关闭”粗暴得多。
别光盯 CPU 和内存
监控面板上绿油油,不代表真稳。常被忽略的是:
• 连接池里的空闲连接数持续归零,新请求排队;
• 日志里反复出现 Connection refused,但服务端口明明开着(其实是后端 Redis 或 MySQL 已拒绝新连);
• 定时任务在某天凌晨全部堆积,因为 NTP 时间校准导致 cron 错判执行时机。
这些细节,往往藏在 10 分钟以上的连续观测里,而不是单次 curl 返回 200 就完事。
稳定性不是上线前的“临门一脚”,它是每次改一行配置、加一个 SDK、换一个云厂商区域时,你心里那个“我试试再说”的习惯。