WCF性能问题:请求停止处理
本文关键字:处理 请求 性能 问题 WCF | 更新日期: 2023-09-27 18:05:06
我一直在WCF服务中遇到这个问题。它在一段时间后停止处理请求。我们已经安排了定期的自动回收(几乎每小时4次)来临时修复它。我已经从服务器上取了内存转储,似乎1个线程(实际上使用企业库进行日志记录)正在被锁定,其他线程正在等待它,但我有点困惑。
我使用Windbg工具获取性能统计数据:-线程给我以下数据:-
74 60 202c 000000000f1fce10 3029220 Preemptive 0000000000000000:0000000000000000 000000000252a6b0 1 MTA (Threadpool Worker) System.Messaging.MessageQueueException 00000003ffc67350
syncblk给出如下:-
Syncblk输出
日志组件是异步的,将消息发送给MSMQ。当外部系统异常发生时,一个线程被锁定,它显示大约1000个线程正在等待(Monitorthread in syncbklk),所有这些都是等待进入日志记录的线程。我不明白的是为什么1个线程被锁定拒绝其他线程,因为MSMQ没有被阻塞,因为其他应用程序使用相同的MSMQ并且工作良好。其次,日志组件只是将消息发送给MSMQ,我们可以认为这是对实际应用的潜在阻碍。日志中使用的异步代码是:-
enter code here action = new Action<LogEntry>(Logger.Write);
IAsyncResult iAr = action.BeginInvoke(entry, CallbackHandler, action);action.EndInvoke(iar);
请对上述问题陈述提出建议。异常详细信息
如windbg工具所示,您将在线程74上获得System.Messaging.MessageQueueException异常。您可以使用windbg工具中的!dso命令获得异常消息,例如"资源不足(类似的东西)"。
如异常图像所示,您的线程被阻塞,因为除非它不执行将数据发送到MSMQ的操作,否则它将无法获得释放,并且其他线程也将因为该线程而卡住。
了解更多信息,请点击下面的链接。https://blogs.msdn.microsoft.com/johnbreakwell/2006/09/18/insufficient-resources-run-away-run-away/