306 Star 869 Fork 291

kerryjiang / SuperSocket

 / 详情

1.6.6.1版本偶现无法正常创建端口监听

待办的
创建于  
2022-04-26 13:39

背景:通过1.6版本构建的socket服务端,以windows服务的形式安装,在部分windows10的机器上,无法正常创建端口监听,目前已排除以下问题,但还没找到问题的原因,期望大佬给些建议。

  1. 服务端正常启动、无报错,并在同一批的其他机器上没有问题,目前存在两台机器有问题,排除框架使用错误
  2. 排除端口占用问题
  3. 排除端口被系统保留的问题,已检查过保留端口,并可以通过其他socket工具创建端口监听
  4. 排除权限问题

评论 (1)

爱一人白首 创建了任务
爱一人白首 修改了描述
展开全部操作日志

问题已解决:最终确认问题为由于对应系统的注册表损坏,在通过以下代码获取对象计数器时出现错误。

var processCategory = new PerformanceCounterCategory("Process");
var runnedInstances = processCategory.GetInstanceNames();

可能是项目在日志收集这块做的不够好,本应该抛出的异常错误未捕捉到,后面通过重新编写了一个完全脱离业务的测试程序才收集到错误信息,错误信息如下:

System.InvalidOperationException: 类别不存在。
   在 System.Diagnostics.PerformanceCounterLib.GetCategorySample(String machine, String category)
   在 System.Diagnostics.PerformanceCounterCategory.GetCounterInstances(String categoryName, String machineName)
   在 System.Diagnostics.PerformanceCounterCategory.GetInstanceNames()
   在 SuperSocket.SocketEngine.ProcessPerformanceCounterHelper.GetPerformanceCounterInstanceName(Process process)
   在 SuperSocket.SocketEngine.ProcessPerformanceCounterHelper.SetupPerformanceCounters()
   在 SuperSocket.SocketEngine.ProcessPerformanceCounterHelper..ctor(Process process)
   在 SuperSocket.SocketEngine.PerformanceMonitor..ctor(IRootConfig config, IEnumerable`1 appServers, IWorkItem serverManager, ILogFactory logFactory)
   在 SuperSocket.SocketEngine.DefaultBootstrap.Initialize(Func`2 serverConfigResolver, ILogFactory logFactory)
   在 SuperSocket.SocketEngine.DefaultBootstrap.Initialize(Func`2 serverConfigResolver)
   在 SuperSocket.SocketEngine.DefaultBootstrap.Initialize()

解决方案就是利用管理员权限重新计算计数器,具体执行步骤为:

  1. 在cmd命令行中输入perfmon 查看时,如果弹出错误提示框,则基本可以判定注册表存在错误
  2. 以管理员运行cmd.exe,输入LODCTR /R ,然后等待系统提示重构注册表计数器成功即可修复
  3. 再次输入perfmon可验证,不再弹出错误提示。则证明问题已修复

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
901312 hopezp 1578935377
C#
1
https://gitee.com/kerryjiang/SuperSocket.git
git@gitee.com:kerryjiang/SuperSocket.git
kerryjiang
SuperSocket
SuperSocket

搜索帮助