如何在Windows Server中查看/监控TCP backlog队列(待处理TCP连接)
Windows Server 查看与监控TCP Backlog队列的方法
TCP Backlog队列分为半连接队列(SYN队列,存储未完成三次握手的连接)和全连接队列(Accept队列,存储已完成三次握手但未被应用程序接收的连接),以下是几种实用的监控方法:
一、内置系统工具
1. netstat 命令
直接筛选处于SYN_RCVD状态的连接,对应半连接队列中的待处理连接:
netstat -ano | findstr /i "SYN_RCVD"
参数说明:-a显示所有连接,-n用数字格式显示地址和端口,-o显示关联进程PID,方便定位对应服务。
2. 资源监视器(Resource Monitor)
通过任务管理器→性能标签→点击「打开资源监视器」,切换到网络页签:
- 展开「TCP连接」,可实时查看并筛选
SYN_RCVD状态的连接 - 在「监听端口」板块,能看到每个监听端口的当前连接数,辅助判断队列负载
3. netsh 命令
查看TCP全局配置(含队列相关参数):
netsh int tcp show global
查看当前监听端口的详细信息:
netsh int tcp show listeners
二、PowerShell实时监控脚本
以下脚本每隔2秒刷新一次,展示半连接队列明细及监听端口的连接统计:
while ($true) { Clear-Host Write-Host "=== TCP半连接队列(SYN_RCVD)实时状态 ===" -ForegroundColor Cyan Get-NetTCPConnection -State SynReceived | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess | Format-Table -AutoSize Write-Host "`n=== 监听端口连接统计 ===" -ForegroundColor Cyan Get-NetTCPConnection -State Listen | Group-Object LocalPort | ForEach-Object { $synCount = (Get-NetTCPConnection -LocalPort $_.Name -State SynReceived).Count $totalCount = (Get-NetTCPConnection -LocalPort $_.Name -State SynReceived, Established).Count [PSCustomObject]@{ 本地端口 = $_.Name 半连接数 = $synCount 已建立+半连接总数 = $totalCount } } | Format-Table -AutoSize Start-Sleep -Seconds 2 }
运行后可直观看到队列的实时变化,判断是否出现队列溢出。
三、性能计数器(Performance Monitor)
通过perfmon打开性能监视器,添加以下关键计数器:
- TCPv4/TCPv6 分类下:
Connections Failed:因队列满导致的连接失败次数Syn Received/sec:每秒收到的SYN包数量(反映半连接队列压力)Connections Reset:异常重置的连接数(可能关联队列溢出)
- 可设置阈值警报,当指标超出预期时自动触发通知。
四、第三方工具(可选)
- TCPView:微软Sysinternals出品的可视化工具,实时展示所有TCP连接,可快速筛选
SYN_RCVD状态的连接,同时关联进程信息,便于定位问题服务。 - Wireshark:通过抓包过滤规则
tcp.flags.syn == 1 and tcp.flags.ack == 0,查看未完成三次握手的SYN包,间接分析半连接队列的负载情况。
内容的提问来源于stack exchange,提问作者TheMah
相关产品推荐
相关产品推荐

