Come si fa a sapere che cosa fa w3wp.exe? (o come diagnosticare un problema di performance)

Ho un problema di performance in un sito che abbiamo fatto, e non sono esattamente sicuro di come iniziare a diagnosticare.

La breve descrizione è: Abbiamo un sito molto piccolo ( http://hearablog.com ) con pochissimo traffico, in un server dedicato crappy, la CPU è sempre molto alta, a volte rimane al 100% per minuti e w3wp.exe sta prendendo la maggior parte di esso. Uno scenario tipico è che w3wp.exe prende il 60% e SQL Server impiega circa il 30%. Anche il nostro DB è piuttosto piccolo.

Descrizione lunga e più particolari:

  • Il sito è ospitato in un server molto crappy da Cari.Net. Fin dall'inizio avevamo la sensazione che il server non si comportsse correttamente, come alcune cose ci vollero troppo a lungo, quindi questo potrebbe essere un problema di configuration dal get go. Potrebbe essere anche che stiamo ottenendo un server virtuale, mentre si suppone che abbia uno dedicato, anche se non abbiamo alcuna prova che lo avrebbe indicato, ad exception del fatto che il server tende ad essere abbastanza lento.

  • Il server è Windows 2008 Standard a 64 bit, con SQL 2008 Express

  • L'hardware è un Celeron 2.80 GHz, RAM da 1 GB

  • Il sito è sviluppato in ASP.Net MVC, utilizzando Entity Framework per l'accesso ai dati.

  • Ora, questo è un hardware abbastanza crappy, ma ho avuto altri server con questi ragazzi, con equivalenti (o peggio) HW, e le performance sono molto meglio di quelle. Detto questo, gli altri server hanno W2003 e SQL2005 e sto usando ASP.Net "WebForms" 2.0, no MVC, no LINQ, no EF; quindi non sono sicuro se andare al 2008 / l'altra cosa significa che si prevede una pena di grande rendimento.

  • Sto servendo file MP3 (5-20 Mb) regolarmente, che è un carico leggermente insolito, forse che sta causando qualche tipo di problema?
    Vorrei causare che w3wp utilizzi un sacco di CPU?

  • L'utilizzo del disco sembra molto basso. La memory è di solito circa il 90%, ma l'uso del disco sembra indicare che non è molto paging.

  • Ogni giorno ricevo tonnellate di messaggi di posta elettronica relativi a timeout SQL, per query che richiedono oltre 30 secondi, anche se tutte le nostre query sono abbastanza semplici (o dovrebbero essere, ma EF potrebbe stuzzicare).

Questo è ciò che il monitor di risorse sembra in uno di questi "sprint" di CPU al 100%, nel caso in cui vi sia qualcosa utile.

alt text

E un'istantanea di alcuni contatori di performance: alt text

Ora, ciò che mi confonde molto è che l'utilizzo della CPU di w3wp è solo così alto. Non dovrebbe fare molto veramente … Quindi le mie domande sono …

  • C'è un modo per scoprire "cosa" sta facendo? Forse anche profilo?
  • Qualsiasi banco di performance che dovrei guardare?
  • Questo è previsto a causa di questa configuration hardware / software?
  • Questa potrebbe essere causa di qualche tipo di errore di configuration, da where iniziare a cercare?

Grazie mille.
Daniel Magliola

  • WAMP Server 2.1: Modifica editor di text predefinito
  • Gestione dei file di registro tra i server Windows multidimensionali
  • Script di Active Directory: DSMOVE non riuscito
  • Backup di copia shadow del server di archivio 2003 eliminato
  • Thin-client con supporto a doppio monitor
  • Come posso get la dimensione del cluster in Windows 2008?
  • Determinare il dominio di accesso della macchina dalla row di command
  • I server di Windows 2003 non inizializzano la scheda di networking dopo un riavvio
  • 7 Solutions collect form web for “Come si fa a sapere che cosa fa w3wp.exe? (o come diagnosticare un problema di performance)”

    È inoltre ansible utilizzare l'interface utente Worker Processes all'interno di Gestione IIS e verificare le richieste attualmente in esecuzione e vedere where stanno bloccando se esistono. Apri Gestione IIS-> Fare clic sul server nell'tree-> Icone di processi doppio di lavoratori -> Fare doppio clic sul process Worker che sta consumando la CPU per vedere le richieste attualmente in esecuzione in tempo reale in modo da poter vedere quale module sta prendendo tempo.

    Consideriamo inoltre l'utilizzo di una richiesta di ricerca non rioutput per tenere traccia di un certo periodo di tempo per richiesta per vedere where stanno prendendo molto tempo.

    Ok, per iniziare – il server è veramente crappy. Ma DOVREBBE essere abbastanza.

    • Per la virtualizzazione, controllare i driver. Non so di nessuna piattaforma di virutalizzazione che nasconde la CPU (e faccio che qualcuno metta un iper-v o esx su un celeron) ma i driver per il disco ecc. Sono un'indicazione.

    • La CPU non dovrebbe essere quella alta. Purtroppo, con questa RAM, tu sei abbastanza brindisi – se si avvia l'aggiunta di un profiler ti prendi molto la memory che hai.

    Vorrei:

    • Controllare i log di roba che eseguono in questo momento.
    • Aggiornare il sistema operativo a 2008 R2 – un numero maggiore di informazioni disponibili.

    Per il test:

    • Nel tuo ambiente di dev compila una copia del sito e esegue alcuni test di performance.
    • Fare la profilazione lì.
    • Utilizza il monitoraggio delle richieste non riuscito per scoprire quali richieste non riescono.

    http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

    c'è qualche inizio da lì. Questo può darti un suggerimento nel caso in cui i problemi siano più – hm – "categorizzabili".

    Vorrei anche tenere registri di performance a lungo termine. Attenzione per il tuo IO (secondi / letti, secondi / scrittura sono praticamente l'unica pertinente). Tutto il resto è IO saggio troppo vago – ma una volta che il tuo IO inizia a prendere più tempo di quanto dovrebbe, i dischi fanno dietro.

    A questo punto escluderei un problema di configuration – alless come indicatore primario. Qualcosa utilizza le risorse W3p, ora devi sapere che cosa è.

    In generale, questo non è un server che mi piacerebbe avere fisico – è così piccolo, non ha senso IMHO per avere una macchina lì. Virtual sarebbe migliore;)

    È ansible provare a utilizzare un programma chiamato Process Explorer per monitorare singole discussioni in esecuzione nel process w3wp. Dovrebbe permetterti di vedere che thread sta causando tutti i danni.

    Ho avuto grande fortuna usando lo strumento diagnostico di Debug di Microsoft per scaricare il mio process w3wp e poi controllare i thread e impilare le tracce per le cose che erano bloccate. Ti dirà anche la pagina richiesta che ha generato il thread che è SUPER bello .

    http://www.microsoft.com/en-us/download/details.aspx?id=26798

    Sono d'accordo con TomTom in giù per la linea, specialmente per get un maggior chilometraggio da un Virtual a questo punto. Debugging / profiling localmente per ridurre il problema è la cosa giusta da fare.

    Posso mettere sul mio Karnak il cappello e il cappello magnifici e chiedere la prima busta. Ram Rebellion. Cosa otterrai quando metti il ​​sistema operativo, ASP.NET e un avido SQL Server Express in 1 GB.

    Credo che il tuo problema è che SQL Server Express tirando in tutta la RAM disponibile per un pool di buffer e che è lento per rilasciarlo. Vedere http://support.microsoft.com/kb/321363 per ulteriori informazioni. Inoltre, IIS dispone di una cache predefinita di 256 MB che potrebbe essere necessario modificare ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Debug Diagnostics è un ottimo strumento per risolvere questo problema (ok, probabilmente un municipio).

    http://technet.microsoft.com/en-us/library/bb742546.aspx è un articolo abbastanza decente da esaminare. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e punti per riciclare la piscina di app per la pazza come un altro problema ansible.

    Utilizzare il contatore "Process" di Perfmon per visualizzare i singoli attributi del process w3wp.exe. Quanto tempo del CPU per il process di lavoratore è il tempo del kernel? I tempi del kernel alti potrebbero essere indicativi di paging, ma dici che non sei convinto. Altre possibilità sono i driver del duff. Il process lavorativo ha 23 thread attivi, che è buono, ma cosa stanno facendo? Provate a ProcessExplorer di SysInternals per scavare un po 'più; è inoltre ansible vedere quali sono le connessioni TCP / IP in gioco. Non ho usato SQL Express, ma sono dotati di parametri di sintonia della memory, come il suo grande fratello. È SQL che affligge IIS di memory, causando pagine eccessive?

    Potrebbe non essere totalmente correlata, ma verificare se stai utilizzando NOLOCK nelle tue query. Può aiutare nel caso dei timeout SQL.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.