1. 精华:压测前先做权限与范围审批,避免影响生产。
2. 精华:用可控并发、指标驱动(连接成功率/延迟/资源占用)来判定跳板机承载能力。
3. 精华:关注sshdMaxStartups)与系统资源(如文件描述符、TCP端口耗尽),这些往往决定压测结果好坏。
作为一名资深运维工程师,我强调操作前审批与快照。对跳板机的压测必须在非高峰窗口、使用测试账号,并确保有回滚与速停开关(如iptables限流)。本篇将给出安全且实用的脚本示例与结果分析方法,帮助你判断跳板机是否能承受并发接入压力。
压测目标与指标:主要关注并发延迟)、连接成功率、以及CPU内存使用率、系统负载。配合监控
前提检查:确认sshdMaxStartups即文件描述符上限;查看conntrack表和TCP端口可用范围。
脚本A:使用并行ssh创建短连接(需要安装 ssh、GNU parallel 或 xargs)。此脚本以密钥认证模拟并发登录并执行简单命令,适合验证sshd
#!/bin/bash
TARGET=bastion.example.com
KEY=~/.ssh/id_rsa_test
CONCURRENCY=100
TOTAL=1000
seq 1 ${TOTAL} | xargs -I{} -P ${CONCURRENCY} bash -c '
start=$(date +%s%N)
ssh -i '"${KEY}"' -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 testuser@'"${TARGET}"' "echo ok" >/dev/null 2>&1
rc=$?
end=$(date +%s%N)
printf "%s,%s,%d\n" "$(date +%s)" "$rc" $(( (end-start)/1000000 ))
'
脚本B:用netcat(nc)或socat仅建立TCP三次握手并保持连接一段时间,适用于测试TCP资源(如TIME_WAIT、连接跟踪)。
#!/bin/bash
TARGET=bastion.example.com
PORT=22
CONC=200
for i in $(seq 1 ${CONC}); do
nc -vz ${TARGET} ${PORT} >/dev/null 2>&1 &
done
wait
echo "done"
压力执行时同时采集系统级指标:用 top、vmstat、iostat、ss、netstat、dstat 或 Prometheus exporter。示例命令:ss -s、ss -tnp | grep sshd、cat /proc/net/sockstat、lsof -p $(pidof sshd)。
结果分析方法(可量化):
1) 成功率 = 成功连接数 / 总尝试数。若成功率低于95%,说明并发能力不足或配置限制。
2) 延迟分布:统计连接建立耗时的P50/P90/P99(脚本A输出的ms值),高P99值说明偶发阻塞或排队。
3) 资源占用:观察压测期间CPU内存、IO和网络带宽,若CPU接近饱和或上下文切换异常,说明需要扩容CPU或优化sshd配置。
4) 文件描述符与socket:如果出现 "too many open files" 或 ss 显示大量 TIME_WAIT/ESTABLISHED,需提高ulimit -n,调整tcp_tw_reuse或优化连接重用。
常见瓶颈与优化建议:
- sshdMaxStartups
- 系统资源:提升文件描述符
- 网络与防护:对外使用负载均衡或多个跳板机集群,并在防火墙上做源IP限流与白名单,防止意外拥塞。
结论:通过以上可控的脚本与指标采集,你作为运维工程师能快速判断跳板机
如果你需要,我可以根据你的环境(CPU、内存、sshd配置与并发目标)生成一套定制化的压测计划和可视化分析模板,直接发来配置我来帮你算出合理的并发阈值。