【问题标题】:System.OutOfMemoryException with WCF during request请求期间带有 WCF 的 System.OutOfMemoryException
【发布时间】:2011-06-13 10:33:05
【问题描述】:

据我所知,我有一台服务器在请求期间传输数据期间抛出 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 是什么,你知道有一个最大限制。
  • 您发送的有效负载有多大?
  • 这是零星的还是特定消息导致的?
  • 我正在发送基于员工浏览的报告摘要,因此这取决于组织有多少员工。摘要包含作为通用 Hashset 访问的页面的 url,这就是我想到 maxArrayLength 和 maxStringContentLength 的原因。使用查询字符串,哈希集可以多次包含相同的页面,只是具有不同的查询字符串值。但除此之外,我有点不知所措。这个特定的客户很大,所以我不会怀疑摘要是否大于 50MB。
  • @Conrad 它是零星的,甚至有时它似乎在跟踪的早期被抛出(我最早看到它被抛出的是 ServerFramingDuplexSessionChannel.OnOpen)

标签: c# .net wcf .net-3.5


【解决方案1】:

鉴于这是一个生产问题,并且它偶尔会在不同的地方发生,我猜您遇到了高内存利用率问题。我将获得系统的内存转储并使用 WinDbg 来查看是什么原因造成的。

您可以使用proc dumpDebug Diag 来执行此操作(但请确保根据需要使用32 位或64 位)。

如果您以前从未对内存进行过分析(而且确实不容易),那么您可能想看看this article

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多