WCF请求时出现System.OutOfMemoryException异常

3

我有一个服务器,出现了System.OutOfMemoryException异常,据我所知,这是在请求期间传输数据时发生的。从查看此跟踪结果来看,我的假设是否正确?

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
  at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
  at System.Net.Security.NegotiateStream.AuthenticateAsServer(NetworkCredential credential, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel requiredImpersonationLevel)
  at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeAcceptor.OnAcceptUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity)
  at System.ServiceModel.Channels.StreamSecurityUpgradeAcceptorBase.AcceptUpgrade(Stream stream)
  at System.ServiceModel.Channels.InitialServerConnectionReader.UpgradeConnection(IConnection connection, StreamUpgradeAcceptor upgradeAcceptor, IDefaultCommunicationTimeouts defaultTimeouts)
  at System.ServiceModel.Channels.ServerSessionPreambleConnectionReader.ServerFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
  at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
  at System.ServiceModel.Channels.CommunicationObject.Open()
  at System.ServiceModel.Dispatcher.ChannelHandler.OpenAndEnsurePump()
  at System.ServiceModel.Dispatcher.ChannelHandler.OpenAndEnsurePump(Object state)
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke2()
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.OnSecurityContextCallback(Object o)
  at System.Security.SecurityContext.Run(SecurityContext securityContext, ContextCallback callback, Object state)
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke()
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ProcessCallbacks()
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.CompletionCallback(Object state)
  at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
  at System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
  at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

我在配置文件中将maxArrayLength和maxStringContentLength设置得非常高。是否可能其中一个值非常巨大,导致通道抛出此错误?这是一个.NET WCF服务,通过IPC与另一个进程进行本地通信。


“really high” 是什么意思,你应该知道有一个最大限制。 - VoodooChild
1
你发送的有效载荷有多大? - Marc Gravell
这是偶发的还是特定的消息引起的? - Conrad Frix
我正在发送一个基于员工浏览的报告摘要,因此它取决于组织有多少员工。摘要包含访问页面的URL作为通用哈希集,这就是为什么maxArrayLength和maxStringContentLength跳入我的脑海。对于查询字符串,哈希集可能包含相同的页面,只是具有不同的查询字符串值。但除此之外,我有点茫然。这个特定的客户非常庞大,所以我不会怀疑摘要是否超过50MB。 - Mike_G
@Conrad 这是偶发的,有时甚至似乎在跟踪中抛出得更早(我见过的最早的情况是在ServerFramingDuplexSessionChannel.OnOpen中抛出)。 - Mike_G
显示剩余3条评论
1个回答

3
考虑到这是一个生产问题,而且会在不同的地方间歇性发生,我猜测您正在遇到高内存利用问题。我建议获取系统的内存转储,并使用WinDbg查看导致此问题的原因。
您可以使用proc dumpDebug Diag来执行此操作(但请确保根据需要选择32位或64位)。
如果您以前没有进行内存分析(其实并不容易),那么您可能需要查看这篇文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接