ESTABLISHED状态的TCP连接数即Apache当前真实并发数,代表正在双向收发数据的活跃连接;推荐用ss -ant | grep -w ESTABLISHED | wc -l统计,该命令轻量、快速、无需root权限,且通过-w避免误匹配,结果最准确。

ESTABLISHED 状态的 TCP 连接数就是 Apache 当前真实并发数,不是进程数、不是请求数、也不是 TIME_WAIT 数——它代表正在双向收发数据的活跃连接。
直接看 ESTABLISHED 连接数(推荐用 ss)
ss 比 netstat 更快、更轻量,现代系统默认自带,无需安装额外包:
ss -ant | grep -w ESTABLISHED | wc -l
-
-a显示所有套接字,-n禁用域名解析,-t限定 TCP,这是最小必要参数集 -
grep -w ESTABLISHED中的-w是关键:防止误匹配ESTABLISHED_TIME_WAIT这类不存在但可能被正则捕获的字符串 - 普通用户可执行,不依赖 root 权限;若加
-p查进程名,则需 root,但计数本身不需要
按 Web 端口过滤(避免混入数据库等干扰连接)
Apache 默认监听80 或 443,但若配置了 Listen 8001,grep 必须同步改:
ss -ant | grep ':80\b' | grep -w ESTABLISHED | wc -l
ss -ant | grep ':443\b' | grep -w ESTABLISHED | wc -l
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
\b是单词边界,确保只匹配:80,不会命中:8080或:8000 - HTTPS 流量走 TCP,所以仍用
-t;QUIC(UDP)不参与 HTTP 并发统计,不用管 - 如果服务监听在
:8080,必须把:80\b换成:8080\b,硬编码脚本容易在这里翻车
别把进程数当并发数(prefork 模式下也仅作参考)
ps -ef | grep httpd | grep -v grep | wc -l
- 这个命令只告诉你开了多少个
httpd进程,不是当前处理多少请求 - prefork 模式下,一个进程通常只服务一个请求,此时进程数 ≈ 并发请求数,但前提是没启用
KeepAlive或KeepAliveTimeout很短;一旦开启长连接,一个进程可能复用多次,进程数就远小于ESTABLISHED数 - worker / event 模式下,一个进程可处理多个请求,进程数和并发数完全不成比例,纯看这个会严重低估压力
实时观察比单次快照更有价值
并发是动态值,秒级突增或缓慢爬升代表不同问题:watch -n 0.5 "ss -ant | grep -w ESTABLISHED | wc -l"
-
-n 0.5表示每半秒刷新一次,能捕捉瞬时毛刺;用1太慢,用0.1可能触发内核调度抖动,0.5 是实测较稳的节奏 - 别只跑一次就下结论;比如看到
ESTABLISHED稳定在 120,但SYN_RECV持续 >10,说明握手卡住,可能是后端响应慢或攻击,不是“负载不高” -
CLOSE_WAIT持续增长是危险信号,大概率是 Apache 没主动关连接,得查KeepAliveTimeout和后端超时设置
ESTABLISHED 的数值和变化趋势,它不撒谎。其他状态只是辅助诊断——比如 TIME_WAIT 高本身正常,但若持续超过 65535,会影响新连接分配;SYN_RECV 高却不见下降,那根本不是并发问题,是连接建立环节出了故障。

















