并发度设置是什么
并发度决定同一时刻有多少目标在执行同一个动作。它有三个层面:控制端的并行任务数、单台目标内部的并行线程数、以及是否复用连接(SSH ControlMaster 或常驻代理)。并发不是越大越快:控制端 CPU、文件描述符上限、出口带宽、跳板机会话数、目标端服务承载力和 sshd 的握手并发上限,任何一个成为瓶颈后,加并发只会把错误率推高。
基本信息
| 常用参数 | Ansible -f(forks)、xargs -P、GNU parallel -j、pssh -p、Salt --batch |
|---|---|
| 默认值 | Ansible 默认 5,xargs 默认串行,parallel 默认按 CPU 核数 |
| 调优依据 | 控制端 CPU 与 fd 上限、网络 RTT、目标端服务承受力 |
| 前置检查 | ulimit -n、sshd MaxStartups、跳板机最大会话数 |
典型使用场景
- 数百台主机只读巡检,可以放开并发换总时长
- 目标是数据库或共享存储,必须压低并发避免连接打满
- 出口带宽有限,并发过高会让请求排队直至超时
- 经跳板机分发,受跳板机连接数与 NAT 表项约束
- 长耗时任务配合滚动窗口,避免所有主机同时进入重负载阶段
并发参数用法
并发参数用法
ansible all -m shell -a 'uptime' -f 20 # 20 台同时执行
printf '%s\n' $(cat hosts) | xargs -P 10 -n 1 ssh -n # 并行 10 路,-n 1 保证每次一台
parallel -j 8 --joblog run.log ssh {} uptime ::: $(cat hosts)
ulimit -n 4096 # 控制端 fd 上限决定并发天花板
ss -s | head -3 # 观察当前连接数与 TIME_WAIT 堆积并发参数与默认值
| 参数 | 典型默认 | 含义 |
|---|---|---|
| Ansible -f / forks | 5 | 同时执行的主机数 |
| xargs -P | 1(串行) | 并行子进程数 |
| GNU parallel -j | CPU 核数 | 作业槽位数 |
| pssh -p | 32 | 并行 SSH 会话数 |
| Salt --batch | 不分批 | 按数量或百分比分批推进 |
并发与限速常配合使用:并发决定同时在途的数量,限速决定单位时间内的启动速率。只调并发容易形成脉冲式冲击,叠加随机间隔后曲线才平稳。
并发拉高之前先启用连接复用(ControlMaster/ControlPersist)或改用常驻代理,可以省掉每台一次的完整握手与认证开销,同样的并发下总时长能明显缩短。
Too many open files、Connection reset by peer、随机几台握手失败,往往不是目标故障,而是控制端 fd 上限或 sshd MaxStartups 被打满。先把并发降下来复现,再逐项排查。