Domanda

Sulla mia macchina (XP, 64) il processo di lavoro ASP.net (w3wp.exe) lancia sempre con 5,5 GB di memoria virtuale riservata. Questo avviene indipendentemente dall'applicazione web è di hosting (può essere qualsiasi cosa, anche una pagina web vuota in aspx).

Questa grande vecchio pezzo di memoria virtuale, è riservata in questo momento inizia il processo, quindi questo non è un ricordo graduale "fuga" di qualche tipo.

Alcuni curiosare in giro con WinDbg mostra che la memoria è questione è privata, riservata e RegionUsageIsVAD, che indica che potrebbe essere opera di qualcuno che chiama VirtualAlloc. Essa mostra inoltre che la memoria in questione è allocato / riservato in 4 grandi blocchi di 1 GB ciascuna ea altri più piccoli (1/4 GB ciascuno).

Quindi penso che ho bisogno di capire chi sta chiamando VirtualAlloc e riservando tutta questa memoria. Come faccio a farlo?

Collegamento di un debugger al processo prima della allocazione di memoria è difficile, perché w3wp.exe è un processo avviato da svchost.exe (vale a dire, IIS / filtro ASP.Net) e se provo a lanciare io stesso, al fine di per eseguire il debug solo chiude senza tutta questa riserva di memoria profusa. Inoltre, i parametri della riga di comando non sono validi se li resuse (che ha un senso, perché è un tubo creato dal processo chiamante).

Posso collegare windbg al processo dopo il fatto (che è come ho trovato le aree di memoria in questione), ma non sono sicuro che sia possibile in quel punto per determinare chi allocato cosa.

È stato utile?

Soluzione

David Wang le risposte a un domanda simile :

  

[...] lo sviluppatore prestazioni ASP.Net mi dice che:

     
      
  • La memoria virtuale riservati è nulla di cui preoccuparsi. È possibile visualizzare   come prestazioni / caching prerequisito   del CLR. E test di carico pesante   dimostra che non è nulla di cui preoccuparsi   di.
  •   
  • System.Windows.Forms - non è tirato dentro dal mondo ciao vuoto ASPX   pagina. È possibile utilizzare Microsoft Debugging   Strumenti e "sx e ld   System.Windows.Forms" per identificare ciò che   è in realtà tirandolo in fase di esecuzione.   Oppure si può ILDASM di trovare la   dipendenza.
  •   
  • mscorlib - assicurarsi che sia GAC'd e NGen'd correttamente
  • .   

Altri suggerimenti

La memoria virtuale è solo lo spazio di indirizzamento assegnato al processo. Non ha nulla a che fare con l'utilizzo di memoria.

See:

  1. memoria virtuale
  2. superare i limiti della di Windows: memoria virtuale
  3. http://support.microsoft.com/kb/555223

Reserved memoria è molto diverso da allocato memoria. Riservando memoria solo alloca spazio di indirizzi. Essa non commette alcun pagine fisiche.

Questo spazio indirizzo è probabile assegnato da IIS per il suo mucchio. Essa si impegnerà solo le pagine quando necessario.

Se davvero si vuole lanciare w3wp.exe da windbg, probabilmente è necessario lanciarlo con gli argomenti della riga di comando valide. È possibile utilizzare Process Explorer per determinare ciò che la riga di comando per la corrente processo w3wp.exe è. Per esempio, sul mio server, il mio era:

  

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

Non sono sicuro di ciò che l'UID in là specifica, ma sembra è probabilmente generato al volo dal servizio W3SVC (che è quello che ha lanciato w3wp.exe) per il nome del tubo di là specificato. Quindi si dovrebbe assolutamente guardare la vostra linea di comando prima di lanciare w3wp da windbg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top