Question

Sur ma machine (XP, 64) le processus de travail ASP.net (w3wp.exe) lance toujours avec 5,5 Go de mémoire virtuelle réservés. Cela se produit indépendamment de l'application web, il est l'hébergement (il peut être quelque chose, même une page web vide ASPX).

Ce grand vieux morceau de mémoire virtuelle est réservé au moment où le processus commence, donc ce n'est pas une mémoire progressive « fuite » de quelque sorte.

Certains fouiner avec windbg montre que la mémoire est question est privée, réservée et RegionUsageIsVAD, ce qui indique qu'il pourrait être le travail de quelqu'un qui appelle VirtualAlloc. Elle montre également que la mémoire en question est allouée / réservée en 4 gros morceaux de 1 Go chacun et un plusieurs plus petits (1/4 Go chacun).

Je suppose que je dois savoir qui vous appelle VirtualAlloc et réservant toute cette mémoire. Comment puis-je faire?

Fixation d'un débogueur au processus avant l'allocation de mémoire est délicate, car w3wp.exe est un processus lancé par svchost.exe (qui est, IIS / filtre à ASP.Net) et si je tente de lancer moi-même pour pour déboguer il ferme juste en bas sans toute cette réserve de mémoire profuse. En outre, les paramètres de ligne de commande ne sont pas valides si je les resuse (ce qui est logique, car il est un tuyau créé par le processus d'appel).

Je peux le joindre WinDBg au processus après le fait (ce qui est la façon dont je trouve les régions de mémoire en question), mais je ne suis pas sûr qu'il est possible à ce moment-là pour déterminer qui les allocations attribuées.

Était-ce utile?

La solution

David Wang répond à cette à une question similaire :

  

[...] le développeur de performance ASP.Net me dit que:

     
      
  • La mémoire virtuelle est réservé rien à craindre. Vous pouvez voir   comme la performance / condition sine qua non de la mise en cache   du CLR. Et les tests de charge lourde   montre qu'il n'y a rien à craindre   sur.
  •   
  • System.Windows.Forms - Ce ne sont pas tirés par monde vide bonjour ASPX   page. Vous pouvez utiliser Microsoft Debugging   Outils et « sx e ld   System.Windows.Forms » pour identifier ce   tire effectivement en cours d'exécution.   Ou vous pouvez ildasm trouver   dépendance.
  •   
  • mscorlib - assurez-vous qu'il est GAC'd et NGen'd correctement
  • .   

Autres conseils

La mémoire virtuelle est juste l'espace d'adressage alloué au processus. Cela n'a rien à voir avec l'utilisation de la mémoire.

Voir:

  1. Mémoire virtuelle
  2. Repousser les limites de Windows: mémoire virtuelle
  3. http://support.microsoft.com/kb/555223

Réservé mémoire est très différent de alloué mémoire. la mémoire alloue seulement l'espace réservation d'adresse. Il ne commet pas de pages physiques.

Cet espace d'adressage est probablement affecté par IIS pour son tas. Il engagera uniquement les pages en cas de besoin.

Si vous voulez vraiment w3wp.exe lancer à partir windbg, vous avez probablement besoin de le lancer avec des arguments de ligne de commande valides. Vous pouvez utiliser Process Explorer pour déterminer quelle est la ligne de commande pour le courant processus w3wp.exe est. Par exemple, sur mon serveur, le mien était:

  

c:. \ Windows \ system32 \ inetsrv \ w3wp.exe -a \ \ pipe \ iisipmeca56ca2-3a28-452a-9ad3-9e3da7b7c765 -t 20 -AP "DefaultAppPool"

Je ne suis pas sûr de ce que l'UID là-bas Précise, mais il semble qu'il est probablement généré à la volée par le service W3SVC (qui est ce qui a lancé w3wp.exe) pour nommer le tuyau qui y est indiqué. Donc, vous devriez vraiment regarder à votre ligne de commande avant de lancer w3wp de windbg.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top