Search code examples
asp.netwcf

WCF service with Full Memory Error (Memory gates checking failed because the free memory) - How to resolve


I have a WCF service host. My request from wc is high. My host, after a period of time exhibits a problem of memory is full. This problem is repeated. When I open the Web Service help page, this error is shown:

Memory gates checking failed because the free memory (1398493184 bytes) is less than 5% of total memory. As a result, the service will not be available for incoming requests. To resolve this, either reduce the load on the machine or adjust the value of minFreeMemoryPercentageToActivateService on the serviceHostingEnvironment config element.

My web.config from the WCF host is as follows:

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

and the host web.config is

<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>

How can I solve my problem?


Solution

  • Try setting minFreeMemoryPercentageToActivateService to 0 in your web.config for WCF Host, as suggested in this answer

    <system.serviceModel>
        <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="0"/>
    </system.serviceModel>
    

    Edit 1: this provides a workaround but does not address the root cause. Depending on your specific situation this may or may not be good enough.

    Edit 2: as correctly pointed out in comment by @radderz "The 'serviceHostingEnvironment' element needs to be a child of 'system.serviceModel'", see MSDN documentation