4 核 8G 单实例压到 8000 QPS,CPU 65%,响应 120 毫秒。上线两台一样的机器挂到同一台数据库,3000 QPS 就开始 502,连接池报 timeout。日志里能对上时间点,这种反而好排。
单机压测时数据库独占,连接池只服务一个进程。两台机器同时连,数据库连接数翻倍先到上限,应用侧线程全卡在拿连接。压测没覆盖共享依赖,单机数字被当成了集群容量。这一点先确认清楚,后面就不用反复试。
sysbench --test=oltp_read_write --threads=64 --mysql-db=test run mysql -e 'show status like "Threads_connected";'
围绕「单机压测结论」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:压测环境按线上拓扑搭 至少两实例加独立数据库;把数据库连接数和慢查询一起盯 别只看应用 CPU;按 70% 水位定容量 留出故障转移余量;扩容后再跑一轮 验证线性度。
结果对不对很好判断,两实例叠加后 QPS 至少是单机的 1.6 倍,502 消失,数据库连接数在 70% 以下。
