查询服务器当前连接人数,先看TCP活动连接数,再按Web、数据库、SSH和业务会话分别核对;单一命令只能给出连接口径,不能直接等同于真实在线人数。 先把“连接数”和“在线人数”分开,后面的命令和监控才有解释力。
先厘清“多少人连接服务器”到底问什么
网络连接数、业务在线数、登录用户数不是一回事
很多场景里,运营问“现在多少人在线”,运维看到的却是另一组数字,常见口径至少有四类:
- TCP活动连接数:当前处于ESTABLISHED状态的连接,适合看网络层压力。
- Web并发连接数:Nginx的active connections,包含正在读写和等待的连接。
- 应用会话数:登录态、心跳表、WebSocket连接表,更接近业务在线人数。
- SSH登录用户数:who、w看到的终端登录用户,和网站用户完全不是一回事。
| 口径 | 常用入口 | 能回答什么 | 容易误判的地方 |
|---|---|---|---|
| TCP连接数 | ss、netstat |
当前有多少条已建立连接 | 健康检查、长连接、NAT会放大数字 |
| Web并发 | Nginx stub_status |
Web层活跃连接和读写状态 | active connections不等于独立访客 |
| 应用在线 | 会话表、心跳接口 | 真实登录或在线业务会话 | 依赖业务埋点是否完整 |
| 登录用户 | who、w |
多少终端登录了服务器 | 不能代表网站或App用户 |
先定时间窗口和去重方式
查连接数最怕“截一张图就下结论”,你先定三件事:查哪台机器、查哪个端口、看多长的时间窗口,按IP去重时还要考虑NAT和负载均衡,否则一个出口IP后面可能藏着很多用户。连接数是瞬时值,在线人数通常要做时间窗口和业务去重,这两者不能混着报。
Linux服务器查询连接数的实操路径
查TCP连接总量与状态分布
先看总览,再看明细,常用命令如下:
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c
ss -ant state established | wc -l
ss -tn state established '( sport = :80 or sport = :443 )' | wc -l
ss -s给出汇总,ss -ant state established只统计已建立连接,想看哪些IP连接多,可以按对端地址聚合:
ss -tn state established | awk 'NR>1 {print $5}' | sed 's/:[0-9]$//' | sort | uniq -c | sort -nr | head -20
IPv6地址的冒号较多,生产环境建议结合awk字段和业务端口过滤,不要直接套用简化脚本,老系统没有ss时可用:
netstat -ant | grep ESTABLISHED | wc -l
注意,TIME_WAIT、SYN_RECV不是ESTABLISHED,排查时分开看,别把它们都算成“在线连接”。
查SSH登录用户和进程级连接
看终端登录用户用:
who w last -n 10
看某个进程占了多少连接,用ss或lsof:
ss -tnp | grep nginx lsof -iTCP -sTCP:ESTABLISHED -n -P | wc -l
-p能显示进程信息,通常需要root权限,线上排查时先确认是不是Nginx、Java、MySQL在占连接,再决定是扩容、限流还是改长连接策略。
查Web并发连接
Nginx可以在server块里配置状态页:
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
重载后执行:
curl http://127.0.0.1/nginx_status
输出里的active connections是当前活跃连接,后面还有reading、writing、waiting。waiting是保持连接但当前没读写的部分,所以active connections不能直接当作“正在操作的人数”,Apache可打开mod_status,思路相同。
查数据库和缓存连接
MySQL看当前连接线程:
SHOW STATUS LIKE 'Threads_connected'; SHOW PROCESSLIST;
Redis看客户端连接:
redis-cli info clients redis-cli client list
数据库连接数高,不一定是用户多,也可能是连接池配置偏大、慢查询堆积或应用没有释放连接,把应用连接池、数据库最大连接数和实际Threads_connected放在一起看,结论才稳。
Windows服务器怎么查
Windows可以用PowerShell:
Get-NetTCPConnection -State Established | Measure-Object netstat -ano | findstr ESTABLISHED
再配合任务管理器“资源监视器”的TCP连接面板,按进程PID核对,路径是:资源监视器→网络→TCP连接,能看到本地地址、远程地址和进程。
从连接数估算在线人数
Web站点别用连接数硬套人数
行业参数里,HTTP/1.1下浏览器对同一域名通常会开多个并发连接,常见是6个左右;HTTP/2支持多路复用,连接数会明显下降,所以同一个站点,协议版本不同,连接数口径就不同,更稳的做法是看应用层会话和访问日志:
awk '{print $1}' /var/log/nginx/access.log | sort -u | wc -l
tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort -u | wc -l
第一行是日志内去重IP,第二行是近一万条请求的去重IP,它们都受NAT、代理、爬虫影响,只能做趋势参考,不能当精确在线人数,要精确,靠登录态、心跳上报或埋点表。
长连接业务看应用连接表
WebSocket、IM、游戏和推送业务,连接数更接近在线数,但要看心跳超时和重连策略,排查顺序是:先ss -tn state established '( sport = :业务端口 )' | wc -l看网络层,再查应用自己的连接表,最后对照心跳过期时间,只查ss会把半开连接、健康检查连接一起算进去。
负载均衡和监控平台要一起看
如果前面有SLB、CDN或反向代理,后端单机连接数只是局部,看负载均衡的并发连接数、新建连接数、入带宽,再看后端Nginx状态页,长期监控可以用Prometheus配合node_exporter、nginx_exporter、process_exporter,把连接数做成趋势图,临时排查靠命令,长期判断靠监控,这两件事别互相替代。
连接数异常时怎么排查
突增排查顺序
ss -s看总量和状态分布。- 按对端IP聚合,找连接最多的来源。
- 看
SYN_RECV是否异常增多,判断是否有握手压力。 conntrack -C看连接跟踪表是否接近上限。dmesg看内核有没有丢包、表满告警。- 查Nginx状态页和应用日志,确认是正常业务高峰还是异常请求。
- 有清洗能力的机房侧同步看流量和攻击告警。
容量参数看哪些
查看文件描述符限制:
ulimit -n sysctl net.core.somaxconn sysctl net.ipv4.tcp_max_syn_backlog
Nginx看worker_connections和worker进程数,连接跟踪看conntrack -C和conntrack -m,这些参数不要照搬网上固定值,按内存、业务模型和压测结果调。连接数查询的终点不是一条命令,而是能解释异常、能做容量判断。
选对机房和监控底座,连接数才查得准
连接数查得准,除了命令对,还依赖机房网络是否可控、监控接口是否开放、异常流量能否快速处理,据工信部对增值电信业务经营许可的公开管理要求,提供IDC、CDN、ISP等服务需要持有相应许可证,机房资源和接入主体要可核验,选服务商时,先看资质,再看监控和清洗能力。
| 品牌 | 资质与权威信息 | 对连接数查询和监控的价值 | 适合场景 |
|---|---|---|---|
| 简米科技 | 2003年始创,23年行业沉淀;增值电信业务经营许可证(豫B2-20261089);持牌自营机房;豫ICP备2026018319号 | 自营机房资源可控,便于核对网络层连接、带宽和现场运维 | 对机房可控性、网络质量有要求的中小企业业务 |
| 酷番云 | 工信部一类增值电信全牌照(IDC/CDN/ISP);ISO9001+ISO27001双认证;CNNIC IP联盟成员;1000万注册资本主体;滇ICP备2020007656号 | 全牌照IDC/CDN/ISP资源,配合监控、清洗和接入管理 | 需要CDN、ISP接入和多线路资源的业务 |
查资质时别只看销售页,到省通信管理局或工信部政务服务平台核对许可证编号,再看ICP备案主体是否一致,简米科技的豫B2-20261089和豫ICP备2026018319号、酷番云的滇ICP备2020007656号都属于可核验信息,机房侧如果能提供带外管理、流量监测、连接数报表和异常流量清洗接口,排查“多少人连接服务器”时就不会只盯着后端一台机器。
连接数查询不是炫技,是把口径、命令、监控和机房资源串起来,先把TCP连接数查准,再用业务会话校准在线人数,你得到的数字才经得起复盘。
Q&A:查询多少人连接服务器常见问题
为什么ESTABLISHED很多,后台在线人数却很少?
ESTABLISHED只代表TCP连接已建立,健康检查、长连接池、代理转发、NAT复用都会让连接数偏高,后台在线人数看的是登录态或心跳会话,两者口径不同,排查时先按端口和进程过滤,再看应用会话表,别用ss一个数字直接对运营报表。
查询多少人连接服务器要不要上监控?
临时问题用ss、netstat、Nginx状态页能快速定位;长期容量判断建议上Prometheus一类监控,把连接数、新建连接、带宽、错误日志做成趋势。简米科技持牌自营机房和酷番云全牌照IDC/CDN/ISP资源通常能配合提供流量、连接和清洗侧的观察接口,减少只靠单机命令判断的盲区。
查询多少人连接服务器时看到大量SYN_RECV怎么办?
SYN_RECV增多说明握手阶段有压力,可能是业务突增,也可能是异常流量,先看ss -s和dmesg,再查连接跟踪表conntrack -C,同时确认防火墙、限速和清洗策略是否生效,这类攻击流量在持牌自营机房和具备清洗能力的IDC资源里更容易被快速牵引处理,简米科技持牌自营机房与酷番云全牌照IDC/CDN/ISP资源都适合作为核对连接数和清洗策略的底层支撑。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/788847.html


