WCF 性能问题:请求停止处理
Posted
技术标签:
【中文标题】WCF 性能问题:请求停止处理【英文标题】:WCF Performance issue: requests are stopped getting processed 【发布时间】:2017-01-09 12:42:15 【问题描述】:我在 WCF 服务中遇到了问题。它会在一段时间后停止处理请求。我们已经安排了定期自动回收(几乎每小时 4 次)来临时修复它。 我从服务器获取了内存转储,似乎 1 个线程(实际上使用企业库进行日志记录)被锁定,其他线程正在等待它,但我有点困惑。
我使用 Windbg 工具来获取性能统计数据:- !threads 给了我以下数据:-
74 60 202c 000000000f1fce10 3029220 Preemptive 0000000000000000:0000000000000000 000000000252a6b0 1 MTA (Threadpool Worker) System.Messaging.MessageQueueException 00000003ffc67350
!syncblk 给了我以下信息:-
Syncblk output
日志组件是异步的,将消息发送到 MSMQ。当外部系统异常发生时,一个线程被锁定,它显示大约 1000 个线程正在等待(syncbklk 中的 Monitorthread),所有这些都是等待进入日志记录的线程。 我不明白为什么 1 个线程被锁定拒绝其他线程,因为 MSMQ 没有被阻止,因为其他应用程序使用相同的 MSMQ 并且工作正常。 其次,日志组件只是将消息发送到 MSMQ ,我们可以认为它对实际应用程序有潜在的阻塞。 日志中使用的异步代码是:-
enter code here action = new Action<LogEntry>(Logger.Write);
IAsyncResult iAr = action.BeginInvoke(entry, CallbackHandler, action);action.EndInvoke(iar);
请就上述问题陈述提出建议。 Exception details
【问题讨论】:
【参考方案1】:如 windbg 工具所示,您在线程 74 上收到 System.Messaging.MessageQueueException 异常。您可以使用 windbg 工具中的 !dso 命令获取异常消息,例如“资源不足(类似的东西)。
如异常图像所示,您的线程被阻塞了,因为除非它不执行将数据发送到 MSMQ 的操作,否则它不会被释放,并且其他线程也会因为该线程而被卡住。
有关更多信息,您可以点击以下链接。 https://blogs.msdn.microsoft.com/johnbreakwell/2006/09/18/insufficient-resources-run-away-run-away/
【讨论】:
以上是关于WCF 性能问题:请求停止处理的主要内容,如果未能解决你的问题,请参考以下文章