web-dev-qa-db-fra.com

Service WCF avec erreur de mémoire complète (la vérification des portes de mémoire a échoué car la mémoire disponible) - Comment résoudre

J'ai un hôte de service WCF. Ma demande de wc est élevée. Mon hôte, après une période de temps présente un problème de mémoire est plein. Ce problème se répète. Lorsque j'ouvre la page d'aide du service Web, cette erreur s'affiche:

La vérification des portes de mémoire a échoué car la mémoire disponible (1398493184 octets) représente moins de 5% de la mémoire totale. Par conséquent, le service ne sera pas disponible pour les demandes entrantes. Pour résoudre ce problème, réduisez la charge sur la machine ou ajustez la valeur de minFreeMemoryPercentageToActivateService sur l'élément de configuration serviceHostingEnvironment.

Mon web.config de l'hôte WCF est le suivant:

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

et l'hôte web.config est

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

Comment puis-je résoudre mon problème?

26
Masoud Sadeg

Essayez de définir minFreeMemoryPercentageToActivateService à 0 dans yourweb.config pour WCF Host, comme suggéré dans cette réponse

39
Andrea Scarcella

au lieu de changer la valeur de configuration WCF, essayez de savoir quel processus mémoire de l'ensemble de travail élevé, essayez de voir que si cela nécessite vraiment

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

Pour savoir également quel processid pointe vers IIS App pool

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

En autorisant zéro dans la configuration, cela pourrait être en mesure d'activer peut corrompre l'état du service pour la mémoire raison non disponible - qui pourrait ne pas être si simple dans la nature :(

Mes 2 cents ...

16
HydPhani

Il y a des situations où changer le web.config n'est pas une option. Dans notre cas, nous avons résolu ce problème en augmentant la mémoire du serveur de 8 Go à 16 Go.

3
mealexro

Ce problème se produit si la RAM de votre système est occupée à plus de 95%, arrêtez certains processus indésirables et essayez à nouveau d'appeler le service.

2
Satya

J'ai utilisé le moniteur de ressources sur mon serveur Web MS 2008 R2 pour déterminer que SQL Server consommait plus de 29 Go sur mes 32 disponibles.

Après avoir lu les opinions des autres sur la quantité de mémoire à allouer à SQL, j'ai défini la mémoire maximale à 24 Go. La limite de mémoire maximale du serveur se trouve dans l'onglet mémoire de vos propriétés SQL Server.

1
MarcB

RECYCLER VOTRE PISCINE D'APPLICATION

  1. Accéder à IIS
  2. Sélectionnez le pool d'applications
  3. Localisez le pool d'applications sur lequel votre application s'exécute et sélectionnez-le
  4. Cliquez sur Recycler dans le panneau de droite.

Voir IIS Ici

0
Shelclair