36

我有一个 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>

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

我该如何解决我的问题?

4

8 回答 8

44

尝试将 minFreeMemoryPercentageToActivateService 在您的 web.config 中为 WCF 主机设置为 0,如本答案中所建议的那样

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

编辑 1:这提供了一种解决方法,但没有解决根本原因。根据您的具体情况,这可能不够好,也可能不够好。

编辑 2:正如@radderz 在评论中正确指出的那样“'serviceHostingEnvironment' 元素需要是 'system.serviceModel' 的子元素”,请参阅MSDN 文档

于 2013-04-20T11:16:54.377 回答
19

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

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

还要知道哪个 processid 指向 IIS 应用程序池

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

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

我的2美分...

于 2014-02-18T15:44:37.167 回答
3

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

于 2014-06-12T08:55:23.893 回答
3

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

于 2017-03-13T07:00:22.870 回答
1

我在我的 MS 2008 R2 Web 服务器上使用了资源监视器来确定 SQL Server 消耗了我可用的 32 个演出中的 29 个演出。

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

于 2015-02-03T22:24:18.377 回答
1

回收您的应用程序池

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

在此处查看 IIS

于 2019-06-12T16:08:59.907 回答
0

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

1) SQL 占用了大部分服务器空间,并且您没有在 SQL Server 设置中指定 Max Server Memory Limit

2)您的系统内存已完全使用。某些程序使用大部分内存来运行。

3) IIS 应用程序池没有被回收。

4) 您没有在您的 Web 服务 Web.Config 文件中指定“minFreeMemoryPercentageToActivateService”标签。您可以通过以下方式在您的 Web.Config 中添加属性。

例如:minFreeMemoryPercentageToActivateService="0"

于 2019-11-21T12:43:21.303 回答
0

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

于 2021-01-19T12:04:15.990 回答