CoreWcf 服务在一段时间后挂断
Posted
技术标签:
【中文标题】CoreWcf 服务在一段时间后挂断【英文标题】:CoreWcf Service hangs up after some time 【发布时间】:2021-06-25 02:00:18 【问题描述】:我曾经有一些 NET Framework WCF 服务。它像发条一样工作。 NET5 和 CoreWCF 发布后,我将服务迁移到 NET5 和 CoreWCF。
现在它会在一段时间后挂断。如果负载很轻,那么它可能会工作一天左右(然后随机死亡),但如果负载变重,它可能会在一个小时左右就死掉。当它死亡时,我可以看到它开始消耗大量的处理能力。
客户端工作正常,即使我重新启动服务,它们也会继续连接(在抱怨了一段时间服务不可用之后)。
服务作为单例运行。
记录并监控记录何时终止似乎是弄清楚发生了什么的唯一方法。不幸的是,这种日志记录会产生大量数据,而且即使在服务的“核心”不再正常运行之后,它似乎也会产生一些数据。
可以切换到 gRPC。但是,这将需要重写所有客户端。
调试是不行的,因为服务死掉了,比方说,在一小时到一天之后的某个地方,当它处理多个连接和计时器事件时。
我想知道是否有人有任何想法。非常感谢!
【问题讨论】:
核心中 WCF 的替代方案是 gRPC:docs.microsoft.com/en-us/dotnet/architecture/cloud-native/grpc 建议:在调试器中运行服务,然后查看它在哪里死亡和/或开始消耗 CPU 周期。 如果你不能使用调试器,那么我认为日志/监控是你最好的选择。也许您可以减少记录的数据量,只关注服务的“核心”。 @brianberns,我听从了你的建议,结果发现我身边有一个愚蠢的错误:我在 每个 WCF 上创建了一个较低级别的底层服务,而不是单例称呼。而且由于这个低级别的服务产生了一个Timer
处理程序,所以服务运行的时间越长,我对Timer
的订阅就越多,直到系统死机。如果可以,请提交您的评论作为答案,那么我很乐意将其标记为这样。非常感谢!
很高兴它成功了!
【参考方案1】:
建议:在调试器中运行服务,然后查看它在哪里死亡和/或开始消耗 CPU 周期。
如果您不能使用调试器,那么我认为记录/监控是您最好的选择。也许您可以减少记录的数据量,只关注服务的“核心”。
【讨论】:
以上是关于CoreWcf 服务在一段时间后挂断的主要内容,如果未能解决你的问题,请参考以下文章