IIS10特定请求后无响应 报semaphore超时错误0x80070079排查求助
排查方向及验证步骤
该错误The semaphore timeout period has expired. (0x80070079)属于Windows操作系统网络层错误,而非IIS或ASP.NET应用层错误,结合「仅本地访问异常、远程访问正常、重启IIS无效仅重启服务器可恢复」的特征,按优先级依次排查以下点:
1. 本地TCP连接表僵死/耗尽验证
问题触发时,在服务器端执行命令查看本地环回的TCP连接状态:
netstat -ano | findstr /i "127.0.0.1:<你的站点监听端口>"
如果存在数千个处于TIME_WAIT/CLOSE_WAIT状态的僵死连接即可定位问题:IIS重启、应用池回收不会清空操作系统层面的TCP连接状态表,只有重启服务器才能清理,完全匹配你当前的现象。
临时修复可执行命令释放僵死连接:
netsh int ipv4 set dynamicport tcp start=1024 num=64511 netsh int ipv4 set tcptimedwaitdelay 30
2. AWS虚拟网卡与Windows TCP特性兼容性验证
AWS云服务器的虚拟网卡和Windows默认开启的TCP卸载类功能存在已知兼容性问题,会偶发本地环回流量写入超时,可直接执行命令禁用相关功能验证:
# 管理员权限运行CMD执行 netsh int tcp set global chimney=disabled netsh int tcp set global autotuninglevel=disabled netsh int tcp set global rss=disabled netsh int tcp set global netdma=disabled
该操作无需重启服务器,修改完成后复现访问流程,若问题不再触发即可确认根因,永久生效保留配置即可。
3. 动态内容压缩模块异常验证
你提供的日志中所有响应都开启了deflate压缩,唯一正常访问的robots.txt有明确的Content-Length头,其余异常请求无明确内容长度,大概率是ASP.NET动态压缩模块在处理chunked传输的压缩内容时触发了本地环回写入死锁。
临时关闭站点的「动态内容压缩」功能,复现访问流程,若问题不再触发,可升级IIS压缩模块补丁或切换为gzip压缩规则即可解决。
4. 系统级HTTP代理/缓存异常验证
检查服务器本地的WinHTTP代理配置,执行命令:
netsh winhttp show proxy
若存在非预期的代理配置,执行重置命令:
netsh winhttp reset proxy
同时清理系统级HTTP缓存:
netsh http flush logbuffer
清理完成后再测试本地访问,确认是否无需重启服务器即可恢复。
5. AWS实例网络限流验证
查看AWS CloudWatch对应实例的网络指标,确认问题触发时间点是否存在入站/出站流量阈值超限、丢包的异常记录,部分ECS实例规格对本地环回的并发连接数有隐形限流,可临时升配实例验证问题是否消失。
内容的提问来源于stack exchange,提问作者ilasno

