【问题标题】:WCF Performance issue: requests are stopped getting processedWCF 性能问题:请求停止处理
【发布时间】: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


【问题讨论】:

    标签: c# multithreading wcf msmq


    【解决方案1】:

    如 windbg 工具所示,您在线程 74 上收到 System.Messaging.MessageQueueException 异常。您可以使用 windbg 工具中的 !dso 命令获取异常消息,例如“资源不足(类似的东西)。

    如异常图像所示,您的线程被阻塞了,因为除非它不执行将数据发送到 MSMQ 的操作,否则它不会被释放,并且其他线程也会因为该线程而被卡住。

    有关更多信息,您可以点击以下链接。 https://blogs.msdn.microsoft.com/johnbreakwell/2006/09/18/insufficient-resources-run-away-run-away/

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2014-02-27
      相关资源
      最近更新 更多