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

Mas*_*deg 28 asp.net wcf

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

内存门检查失败,因为可用内存(1398493184字节)小于总内存的5%.因此,该服务将无法用于传入请求.要解决此问题,请减少计算机上的负载或调整serviceHostingEnvironment配置元素上的minFreeMemoryPercentageToActivateService的值.

我在WCF主机上的web.config如下:

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
  <serviceMetadata httpGetEnable="true"/>
  <serviceDebug includeExceptionDetailInFaults="false"/>
  <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="1"/>
</behavior>
</serviceBehaviors>
Run Code Online (Sandbox Code Playgroud)

和主机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>
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决我的问题?

And*_*lla 40

尝试在wwe主机的yourweb.config中将minFreeMemoryPercentageToActivateService设置为0,如此答案中所示


Hyd*_*hie 16

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

Powershellcommand>> get-process | Sort-Object WS -desc >c:\process.txt 
Run Code Online (Sandbox Code Playgroud)

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

cmd.exe>> %systemroot%\system32\inetsrv\AppCmd.exe list wp 
Run Code Online (Sandbox Code Playgroud)

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

我的2美分......

  • +1用于推荐解决根本原因.这可以通过减少昂贵进程的内存占用(可能是由某些代码中的错误引起)或通过增加可用资源来解决. (2认同)
  • 将此值设置为零不会损坏任何内容,它指的是可用的%物理内存,而不是页面文件.它在密集环境中相对正常,以使物理内存过度提交.如果您的服务器没有虚拟内存(即页面文件已满),那么您将遇到的问题不仅仅是服务未正确激活. (2认同)

小智 5

回收您的应用程序池

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

请参阅此处的 IIS