服务器端口故障求助:Only one usage of each socket address异常排查
问题排查与日志方案
易忽略的检查项
- SharpSVN套接字释放问题:SharpSVN若未正确处理连接关闭,会导致大量
TIME_WAIT状态的端口堆积,即便扩大动态端口范围也无法缓解。在服务器上运行命令netstat -ano | findstr TIME_WAIT,查看这类端口的数量;若远超正常范围,需检查SharpSVN的连接池配置,确保连接关闭时主动释放套接字。 - SVN端口重复绑定:确认是否有多个进程绑定了SVN服务端口(默认3690)。运行
netstat -ano | findstr :3690,若输出多个不同PID,说明存在重复启动的SVN服务进程,需终止残留进程并调整服务启动逻辑。 - 用户端端口限制:仅单个用户随机出现问题,可能是用户本地动态临时端口耗尽。让用户在自己电脑上运行
netstat -ano | findstr TIME_WAIT,若数量过多,建议用户扩大本地动态端口范围,或关闭不必要的网络连接。 - 防火墙/安全软件干扰:服务器或用户端的防火墙、安全软件可能锁定
TIME_WAIT状态的端口,阻止系统复用。可临时关闭相关软件测试,或在规则中添加允许SVN端口复用的设置。
记录全天端口使用的简单方法
Windows服务器
- 批处理定时日志:
- 先创建文件夹
C:\port_logs - 新建批处理文件
port_log.bat,内容如下:@echo off set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2% netstat -ano >> C:\port_logs\port_usage_%timestamp%.txt - 打开「任务计划程序」,创建定时任务,设置每5分钟执行一次该批处理文件,即可自动记录全天端口占用情况。
- 先创建文件夹
- PowerShell详细日志:
- 新建PowerShell脚本
port_log.ps1,内容如下:$timestamp = Get-Date -Format "yyyyMMdd_HHmmss" $logDir = "C:\port_logs" if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null } $logPath = Join-Path $logDir "port_usage_$timestamp.txt" # 记录所有关键状态的端口 netstat -ano | Select-String "LISTENING|ESTABLISHED|TIME_WAIT" | Out-File $logPath # 追加记录SVN端口相关的进程信息 $svnPort = "3690" # 替换成你的SVN服务端口 $pids = (netstat -ano | Select-String ":$svnPort" | ForEach-Object { $_.Line.Split()[-1] }) | Select-Object -Unique Get-Process -Id $pids -ErrorAction SilentlyContinue | Format-Table Id, Name, Path | Out-File $logPath -Append - 同样通过任务计划程序定时执行该脚本,日志会包含进程名和路径,更方便定位问题。
- 新建PowerShell脚本
Linux服务器(若为Linux环境)
- 编辑crontab定时任务:
crontab -e - 添加一行:
*/5 * * * * ss -tunap >> /var/log/port_usage_$(date +\%Y\%m\%d_\%H\%M\%S).log - 保存后,系统会每5分钟记录一次端口及对应进程信息。
内容的提问来源于stack exchange,提问作者Emile
相关产品推荐
相关产品推荐

