'Pool of native msmq messages is full' 跟踪消息是什么意思?
What does 'Pool of native msmq messages is full' trace message mean?
我一直在使用 SvcTraceViewer.exe 跟踪消息,这些消息是使用 c# 应用程序通过 MSMQ 传输的,并且遇到了一个我不理解的信息事件。
原始 XML 看起来像这样:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262242</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2015-03-02T14:54:57.3176368Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{f6fa4c52-6372-45ce-9171-1c5d789c3bf0}" />
<Execution ProcessName="MYPROCESS.EXE" ProcessID="12492" ThreadID="5" />
<Channel />
<Computer>MYCOMPUTER</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Channels.MsmqPoolFull.aspx</TraceIdentifier>
<Description>Pool of the native MSMQ messages is full. This may affect performance.</Description>
<AppDomain>ASM.Sequoia.Reporting.ReportGenerator.exe</AppDomain>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
消息 'Pool of the native MSMQ messages is full. This may affect performance.' 很明显,但我找不到关于它可能意味着什么的任何有意义的信息。
快速 google 之后,我找到了以下链接 - none 其中确实帮助我理解了这个日志告诉我的内容,尽管第一个说它可以被忽略.由于博客是 8 年前的,所以我想问一下,因为我不知道这些信息是否仍然是最新的。
http://blogs.msdn.com/b/drnick/archive/2007/03/06/the-pool-is-full.aspx(说要忽略信息 - 但来自 8 年前)
https://msdn.microsoft.com/en-us/library/aa738731(v=vs.110).aspx(不是很有帮助 MSDN post?!)
有关信息,我使用的是非事务性队列,没有排队的消息(卡在队列或处理中),死信队列中没有任何消息...我通过队列发送的信息很大 -由于它包含一堆序列化图像,因此大小可达几 MB。
有人知道这是什么意思吗?
我认为这个消息没什么好担心的。我查看了 WCF 源代码,发现它只是一些内部对象池已满时的诊断消息。他们使用池来重用 MsmqInputMessage
个对象。当池已满时,他们只会将该对象留给垃圾收集器。似乎他们在池为空时跟踪相同的消息,在这种情况下,他们只是在发生这种情况时创建新对象。所以在这些日志消息之后一切正常,虽然不是最佳的,即一些额外的对象将被创建和垃圾收集。
顺便说一句。您可以在线浏览.Net 源或下载它并在VS 中打开一些子项目。在这里:
http://referencesource.microsoft.com/
以下是针对您的问题的一些有趣文件:
http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/MsmqInputMessagePool.cs
http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/MsmqOutputChannel.cs
您可以搜索调用 MsmqDiagnostics.PoolFull
方法的位置。
我一直在使用 SvcTraceViewer.exe 跟踪消息,这些消息是使用 c# 应用程序通过 MSMQ 传输的,并且遇到了一个我不理解的信息事件。
原始 XML 看起来像这样:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262242</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2015-03-02T14:54:57.3176368Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{f6fa4c52-6372-45ce-9171-1c5d789c3bf0}" />
<Execution ProcessName="MYPROCESS.EXE" ProcessID="12492" ThreadID="5" />
<Channel />
<Computer>MYCOMPUTER</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Channels.MsmqPoolFull.aspx</TraceIdentifier>
<Description>Pool of the native MSMQ messages is full. This may affect performance.</Description>
<AppDomain>ASM.Sequoia.Reporting.ReportGenerator.exe</AppDomain>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
消息 'Pool of the native MSMQ messages is full. This may affect performance.' 很明显,但我找不到关于它可能意味着什么的任何有意义的信息。
快速 google 之后,我找到了以下链接 - none 其中确实帮助我理解了这个日志告诉我的内容,尽管第一个说它可以被忽略.由于博客是 8 年前的,所以我想问一下,因为我不知道这些信息是否仍然是最新的。
http://blogs.msdn.com/b/drnick/archive/2007/03/06/the-pool-is-full.aspx(说要忽略信息 - 但来自 8 年前)
https://msdn.microsoft.com/en-us/library/aa738731(v=vs.110).aspx(不是很有帮助 MSDN post?!)
有关信息,我使用的是非事务性队列,没有排队的消息(卡在队列或处理中),死信队列中没有任何消息...我通过队列发送的信息很大 -由于它包含一堆序列化图像,因此大小可达几 MB。
有人知道这是什么意思吗?
我认为这个消息没什么好担心的。我查看了 WCF 源代码,发现它只是一些内部对象池已满时的诊断消息。他们使用池来重用 MsmqInputMessage
个对象。当池已满时,他们只会将该对象留给垃圾收集器。似乎他们在池为空时跟踪相同的消息,在这种情况下,他们只是在发生这种情况时创建新对象。所以在这些日志消息之后一切正常,虽然不是最佳的,即一些额外的对象将被创建和垃圾收集。
顺便说一句。您可以在线浏览.Net 源或下载它并在VS 中打开一些子项目。在这里:
http://referencesource.microsoft.com/
以下是针对您的问题的一些有趣文件: http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/MsmqInputMessagePool.cs http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/MsmqOutputChannel.cs
您可以搜索调用 MsmqDiagnostics.PoolFull
方法的位置。