2013-04-20 13 views
20

Ho un host del servizio WCF. La mia richiesta da wc è alta. Il mio ospite, dopo un certo periodo di tempo, presenta un problema di memoria pieno. Questo problema si ripete. Quando ho aperto la pagina di aiuto Web Service, viene visualizzato questo errore:Servizio WCF con errore di memoria completa (il controllo delle porte di memoria non è riuscito a causa della memoria disponibile) - Come risolvere

cancelli la memoria Controllare non è riuscita perché la memoria libera (1398493184 bytes) è inferiore al 5% del totale della memoria. Di conseguenza, il servizio sarà non disponibile per le richieste in arrivo. Per risolvere questo problema, ridurre il carico sulla macchina o regolare il valore di minFreeMemoryPercentageToActivateService nel componente servizioHostingEnvironment config.

mio web.config dall'host WCF è la seguente:

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

e web.config host è

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

Come posso risolvere il mio problema?

+2

Nei post futuri, copiare e incollare il codice anziché inserirlo come screenshot – Lemurr

+0

Solo per notare: L'elemento 'serviceHostingEnvironment' deve essere figlio di 'system.serviceModel' non 'comportamento' (come nell'esempio in thread @Andrea in dotazione) – Radderz

risposta

34

Prova a impostare minFreeMemoryPercentageToActivateService a 0 in yourweb.config per WCF Host, come suggerito in this answer

16

invece di cambiare il valore di configurazione WCF, cercare di conoscere quale elaborare memoria WorkingSet alta, provare a vedere che se la sua realtà richiede

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

anche sapere se il quale ProcessID sta puntando a IIS App piscina

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

Permettendo a zero in config, questo potrebbe essere in grado di attivare può danneggiare lo stato del servizio per la memoria ragione non disponibile - che potrebbe non essere così semplice in natura :(

miei 2 centesimi ...

+2

+1 per raccomandare di risolvere la causa principale. Questo potrebbe essere risolto riducendo l'ingombro di memoria di un processo costoso (forse causato da un bug in qualche codice) o aumentando le risorse disponibili. –

+0

In seguito all'approccio powershell di 'get-process', è anche possibile utilizzare la seguente istruzione per identificare informazioni di processo più dettagliate (* titolo della finestra, utilizzo massimo, ecc. *) ...' get-process -name mioprocesso | Select-Object *> c: \ processdetail.txt' – SliverNinja

+2

L'impostazione a zero non corrompe nulla, fa riferimento a% memoria fisica disponibile, non al file di paging. È relativamente normale in ambienti densi avere una memoria fisica eccessivamente compromessa. se il tuo server era fuori dalla memoria virtuale (cioè il file della pagina pieno), avrai problemi più grossi del solo fatto che il servizio non si attivi correttamente. – Steven

2

Ci sono situazioni in cui la modifica di web.config non è un'opzione. Nel nostro caso abbiamo risolto questo problema aumentando la memoria del server da 8 GB a 16 GB.

1

Ho usato il monitor di risorse sul mio MS 2008 R2 Server Web per determinare che SQL Server è stato consumando oltre 29 concerti della mia disponibile 32.

Dopo aver letto altre opinioni su quantità di memoria da allocare a SQL Ho impostato il memoria massima a 24 concerti. Il limite massimo di memoria del server può essere trovato nella scheda della memoria delle proprietà di SQL Server.

1

Questo problema si verifica se la RAM del sistema è occupata per più del 95%, interrompe alcuni processi indesiderati e tenta di richiamare nuovamente il servizio.

+0

Sì. Ho notato che il mio utilizzo della RAM è circa il 94% di 16 GB quando si è verificata questa eccezione. Nel mio caso la mia applicazione sta perdendo memoria. –

Problemi correlati