web-dev-qa-db-fra.com

Un processus desservant le pool d'applications «Classic .NET AppPool» a subi une erreur de communication fatale avec le service d'activation de processus Windows

J'exécute une application Web ASP.NET 3.5 sur IIS 7 sur Windows Server 2008.

J'ai reçu l'erreur suivante plus tôt cet après-midi:

HTTP Error 503. The service is unavailable.

J'ai regardé dans les journaux d'événements et j'ai découvert que:

A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '3328'. The data field contains the error number.

Voici les détails complets de cet événement:

Log Name:      System
Source:        Microsoft-Windows-WAS
Date:          18/09/2009 14:58:31
Event ID:      5011
Task Category: None
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      computername
Description:
A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '3328'. The data field contains the error number.
Event Xml:
<Event xmlns="http://schemas.Microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-WAS" Guid="{5 .. 0}" EventSourceName="WAS" />
    <EventID Qualifiers="32768">5011</EventID>
    <Version>0</Version>
    <Level>3</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2009-09-18T13:58:31.000Z" />
    <EventRecordID>23552</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>System</Channel>
    <Computer>computername</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="AppPoolID">Classic .NET AppPool</Data>
    <Data Name="ProcessID">3328</Data>
    <Binary>6D000780</Binary>
  </EventData>
</Event>

Cela s'est traduit par:

Application pool 'Classic .NET AppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.

Voici les détails complets de cet événement:

Log Name:      System
Source:        Microsoft-Windows-WAS
Date:          18/09/2009 15:03:05
Event ID:      5002
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      computername
Description:
Application pool 'Classic .NET AppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.
Event Xml:
<Event xmlns="http://schemas.Microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-WAS" Guid="{5 .. 0}" EventSourceName="WAS" />
    <EventID Qualifiers="49152">5002</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2009-09-18T14:03:05.000Z" />
    <EventRecordID>23557</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>System</Channel>
    <Computer>computername</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="AppPoolID">Classic .NET AppPool</Data>
    <Binary>
    </Binary>
  </EventData>
</Event>

Conclusion dans l'erreur HTTP 503. Le service n'est pas disponible.

Quelqu'un pourrait-il m'aider à identifier comment cela s'est produit et ce que je dois faire pour éviter que cela ne se reproduise à l'avenir.

36
Walter Lockhart

Celui-ci est assez méchant. Je recommande d'obtenir les outils IIS Debug Diagnostics . Vous pouvez probablement atténuer le problème en désactivant la "Protection contre les échecs rapides" dans les propriétés de votre pool d'applications, mais cela ne fera que masquer le problème. Ce qui se passe, c'est que votre application rencontre une exception si souvent/si souvent que le service s'arrête. Vous devrez exécuter l'outil de diagnostic pour capturer tout ce qui entre et sort pour trouver l'exception qui se produit.

Cela peut être une tâche très laborieuse car l'outil rassemblera des gigaoctets d'ordures à filtrer. Si vous êtes chanceux, la désactivation de la "Protection rapide contre les échecs" pourrait permettre à l'exception de se poursuivre jusqu'au navigateur, mais je suppose que le serveur va finir par se bloquer.

16
Joel Etherton

Si vous utilisez NServiceBus, assurez-vous que le compte sous lequel le pool d'applications s'exécute dispose d'autorisations pour lire la file d'attente de messages.

NServiceBus exécute une tâche d'arrière-plan au démarrage de l'application qui expire après 10 secondes, provoquant la mort du processus w3wp s'il ne peut pas lire dans la file d'attente. Après n (valeur par défaut de 5), w3wp se bloque. La protection contre les défaillances rapides entre en action et arrête le pool d'applications.

http://blog.jonathanoliver.com/2010/11/nservicebus-w3wp-exe-processes-crashing/

8
Luke Smith

Son probablement causé par une boucle infinie.

(Je viens d'avoir le même problème.) Il vous suffit donc de rechercher des emplacements dans le code qui utilisent des boucles et de voir si la suppression de l'une d'entre elles arrête l'erreur. Une fois que vous avez trouvé le coupable, vous pouvez essayer de comprendre ce qui le fait boucler indéfiniment.

7
zasyatkin

Je viens de retrouver et de résoudre le même problème désagréable. Quelques choses qui pourraient causer le problème:

  • Une boucle Server.Transfer ()
  • Appel de CurrentThread.Abort () dans certains scénarios .. (Comme après un Server.Transfer ()!)

Réparer ces choses est ce qui les a réparées pour nous.

2
JerSchneid

J'ai eu ce problème, l'observateur d'événements avait "Le module DLL C:\Windows\system32\RpcProxy\RpcProxy.dll n'a pas pu se charger. Les données sont l'erreur." Ce message comportait les étapes pour corriger cela: http://forums.iis.net/t/1154189.aspx

0
campo