具有完全内存错误的WCF服务(由于可用内存,内存门检查失败) - 如何解决

时间:2013-04-20 11:00:37

标签: asp.net wcf

我有一个WCF服务主机。我对wc的要求很高。我的主人,经过一段时间后表现出内存充满的问题。重复这个问题。当我打开Web服务帮助页面时,会显示以下错误:

  

内存门检查失败,因为可用内存(1398493184   bytes)小于总内存的5%。结果,服务将   不适用于传入请求。要解决此问题,请减少   机器上的负载或调整值   minFreeMemoryPercentageToActivateService上   serviceHostingEnvironment配置元素。

来自WCF主机的我的web.config如下:

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
  <serviceMetadata httpGetEnable="true"/>
  <serviceDebug includeExceptionDetailInFaults="false"/>
  <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="1"/>
</behavior>
</serviceBehaviors>

,主机web.config是

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IPaperService" clouseTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisojnMode="StringWildcard" maxBufferSize="1000000000" maxBufferPoolSize="1000000000" maxReceivedMessageSize="100000000" messageEncoding="text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="1000000000" maxArrayLength="1000000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  <security mode="None">
  <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
  <message clientCredentialType="UserName" algorthmSuite="Default" />
  <security>
</binding>

如何解决我的问题?

8 个答案:

答案 0 :(得分:38)

尝试在this answer

中建议的wCF主机的yourweb.config中将minFreeMemoryPercentageToActivateService设置为0

答案 1 :(得分:16)

而不是更改WCF配置值, 尝试知道哪个进程工作集内存为高,请尝试查看它是否真的需要

Powershellcommand>> get-process | Sort-Object WS -desc >c:\process.txt 

还要知道哪个processid指向IIS App pool

cmd.exe>> %systemroot%\system32\inetsrv\AppCmd.exe list wp 

通过在配置中允许零,这可能能够激活可能破坏服务状态的内存不可用的原因 - 这可能不是那么直接的性质:(

我的2美分......

答案 2 :(得分:3)

在某些情况下,更改web.config不是一个选项。在我们的例子中,我们通过将服务器的内存从8GB增加到16GB来解决这个问题。

答案 3 :(得分:2)

如果系统的RAM占用率超过95%,则会出现此问题,请停止某些不需要的进程并再次尝试调用该服务。

答案 4 :(得分:1)

我使用MS 2008 R2 Web服务器上的资源监视器来确定SQL Server消耗了超过29 gig的可用32。

在阅读了其他关于分配给SQL的内存量的意见后,我将最大内存设置为24 gigs。可以在SQL Server属性的“内存”选项卡上找到最大服务器内存限制。

答案 5 :(得分:0)

回收您的应用程序池

  1. 转到IIS
  2. 选择应用程序池
  3. 找到运行您的应用程序的应用程序池并选择它
  4. 点击右侧面板中的回收。

See IIS Here

答案 6 :(得分:0)

上述错误可能有3-4种可能的原因:

  

1)SQL使用了大部分服务器空间,并且您没有在SQL Server设置中指定“最大服务器内存限制”

     

2)您的系统RAM已被完全使用。某些程序使用了大部分RAM来运行它们。

     

3)IIS应用程序池未回收。

     

4)您尚未指定“ minFreeMemoryPercentageToActivateService”   Web服务Web.Config文件中的标记。您可以在   Web.Config如下。

     

例如:minFreeMemoryPercentageToActivateService =“ 0”

答案 7 :(得分:0)

在我们的例子中,我们遇到了内存泄漏。我建议修改代码,而不是应用 web.config 调整。