Vraag Hoe kunt u weten wat w3wp.exe doet? (of hoe een prestatieprobleem te diagnosticeren)


Ik heb een prestatieprobleem in een site die we hebben gemaakt en ik weet niet precies hoe ik de diagnose moet stellen.

De korte beschrijving is: we hebben een hele kleine site (http://hearablog.com) met zeer weinig verkeer, in een waardeloze dedicated server, is de CPU altijd erg hoog, soms blijft hij minutenlang op 100% staan ​​en neemt w3wp.exe het meeste van het. Een typisch scenario is w3wp.exe neemt 60% en SQL Server duurt ongeveer 30%. Onze DB is ook vrij klein.

Lange beschrijving en meer details:

  • De site wordt gehost in een zeer waardeloze server door Cari.Net. Vanaf het begin hadden we het gevoel dat de server zich niet helemaal correct gedroeg, alsof sommige dingen gewoon te lang zouden duren, dus dit kan een configuratieprobleem zijn vanaf het begin. Het mei ook zijn dat we een virtuele server krijgen terwijl we verondersteld worden een toegewijde te hebben, hoewel we geen bewijs hebben dat dit aangeeft, behalve dat de server nogal traag is.

  • De server is Windows 2008 Standard 64-bit, met SQL 2008 Express

  • Hardware is een Celeron 2,80 GHz, 1 Gb RAM

  • De website is ontwikkeld in ASP.Net MVC en gebruikt Entity Framework voor gegevenstoegang.

  • Nu, dit is behoorlijk waardeloze hardware, maar ik heb andere servers gehad met deze jongens, met een equivalent (of erger) HW, en de prestaties zijn veel beter dan deze. Dat gezegd hebbende, de andere servers hebben W2003 en SQL2005, en ik gebruik ASP.Net "WebForms" 2.0, geen MVC, geen LINQ, geen EF; dus ik weet niet zeker of naar 2008 gaan / de andere dingen betekenen dat een hoge prestatieboete wordt verwacht.

  • Ik serveer regelmatig MP3-bestanden (5-20 Mb), wat een beetje ongebruikelijke lading is, misschien veroorzaakt dit een of ander probleem?
    Zou dat ervoor zorgen dat w3wp veel CPU's gebruikt?

  • Schijfgebruik lijkt erg laag. Het geheugen is meestal rond de 90%, maar het schijfgebruik lijkt erop te wijzen dat het niet veel paging.

  • ik krijg tons van e-mails elke dag over SQL-time-outs, voor zoekopdrachten die meer dan 30 seconden duren, hoewel al onze vragen vrij eenvoudig zijn (of zouden moeten zijn, maar EF heeft het misschien verpest).

Dit is hoe bronmonitor eruitziet in een van deze "sprints" van 100% CPU, voor het geval dat daar iets nuttigs is.

alt text

En een momentopname van sommige prestatiemeteritems: alt text

Wat mij nu erg verwart, is dat het CPU-gebruik van w3wp net zo hoog is. Het zou eigenlijk niet echt veel moeten doen ... Dus mijn vragen zijn ...

  • Is er een manier om erachter te komen "wat" het doet? Misschien zelfs profiel het?
  • Zijn er prestatietellers waar ik naar moet kijken?
  • Is dit te verwachten gezien deze hardware / softwareconfiguratie?
  • Is dit mogelijk veroorzaakt door een configuratiefout, waar zou u beginnen te kijken?

Dank u zeer.
Daniel Magliola


41
2017-10-27 12:13


oorsprong




antwoorden:


U kunt ook de gebruikersinterface voor werkprocessen in IIS Manager gebruiken en de aanvragen bekijken die momenteel worden uitgevoerd en zien waar ze zich eventueel bevinden. Open IIS-beheer-> Klik op het pictogram Server in de structuur-> Dubbelklik op werkprocessen voor werknemers-> Dubbelklik op het werkproces dat CPU verbruikt om de momenteel uitgevoerde aanvragen in realtime te bekijken, zodat u kunt zien welke module tijd nodig heeft.

Overweeg ook om Failed Request Tracing te gebruiken om een ​​deel van de tijd per verzoek bij te houden om te zien waar ze lang aan toe zijn.


40
2017-10-27 22:01



Dit is veelbelovend, het klinkt eigenlijk precies PRECIES wat ik wil zien, maar eigenlijk zien die schermen leeg. Het toont blijkbaar alleen verzoeken die langer duren dan een seconde, volgens het grote bord bovenaan, en geen van onze verzoeken is duidelijk, omdat de lijst leeg is. Hebt u ideeën voor het weergeven van meer verzoeken? Hoe het 1s-filter te verlagen? Bedankt! - Daniel Magliola
U kunt 0 in het filter typen en op Start klikken, waarna het op 0 seconden staat. U kunt ook uitvoeren vanaf een verhoogde opdrachtprompt "% windir% \ system32 \ inetsrv \ appcmd.exe lijstaanvragen" - Carlos Aguilar Mares
Heel erg bedankt Carlos! Dit is wat ik uiteindelijk deed om het ene verzoek (A cron we) dat elke 5 minuten mijn server aan het doden was te vinden (het duurde 3,5 minuut om te draaien, dus het was bijna constant op 100% CPU). Bedankt!!! - Daniel Magliola
In deze gebruikersinterface is me verteld welke URL is gebruikt; helaas is het een POST naar een asmx-webservice en die gegevens zijn niet beschikbaar. (Headbang) - Ross Presser


Ok, om te beginnen - de server is ERG waardeloos. Maar het MOET voldoende zijn.

  • Controleer uw stuurprogramma's voor virtualisatie. Ik ken geen virutalization-platform dat de CPU verbergt (en ik kan niet zeggen dat iemand een hyper-v of esx op een celeron plaatst), maar de stuurprogramma's voor schijf enz. Zijn een indicatie.

  • CPU zou niet zo hoog moeten zijn. Helaas, met deze RAM, ben je behoorlijk veel toast - als je begint met het toevoegen van een profiler, blaas je het geheugen dat je hebt vrij vaak op.

Ik zou:

  • Controleer de logboeken op dingen die op dit moment worden uitgevoerd.
  • Upgrade het OS naar 2008 R2 - VEEL meer informatie is daar beschikbaar.

Om uit te proberen:

  • Maak in uw ontwikkelomgeving een kopie van de site en voer een aantal prestatietests uit.
  • Doe daar profilering.
  • Gebruik Failed REquest Tracking om uit te zoeken welke aanvragen mislukken.

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

begint daar wat. Dit kan je een hint geven in het geval dat de problemen meer - hm - "categoriseerbaar" zijn.

Ik zou ook prestatielogboeken op langere termijn bijhouden. Pas op voor uw IO (seconden / lezen, seconden / schrijven zijn vrijwel de enige relevante). Al de rest is IO verstandig te vaag - maar zodra uw IO langer duurt dan zou moeten, raken de schijven achter.

Ik zou een configuratieprobleem op dit punt uitsluiten - tenminste als primaire indicator. Iets verbruikt uw W3p-bronnen, nu moet u weten wat het is.

Over het algemeen is dit geen server die ik graag fysiek zou willen hebben - het is zo klein dat het geen zin heeft om IMHO daar te laten werken. Virtueel zou beter zijn;)


5
2017-10-27 12:47



Hartelijk dank voor uw antwoord. enkele vragen: Welke logs zou je controleren op dingen die op dit moment worden uitgevoerd? (sorry als dit een newbie vraag is) - Upgrade OS: We kunnen dat proberen, maar ik ben bang dat het dingen zal breken, misschien, hoe veilig is dit? - Dev-omgeving: het probleem is dat het in mijn ontwikkelomgeving goed werkt. CPU is verwaarloosbaar, aanvragen mislukken, etc. - Daniel Magliola
Wat betreft I / O-logs: ik heb zojuist de tellers toegevoegd die u noemt, en ze staan ​​allemaal op 0, terwijl de CPU hoog is. Ik heb zojuist een screenshot toegevoegd van een aantal prestatiemeteritems waar ik naar kijk. Ik weet dat een momentopname niet het hele verhaal vertelt, maar die waarden zijn meestal behoorlijk stabiel. Denkt u dat het aantal huidige verbindingen (waarvoor ik geen verklaring heb) een probleem kan zijn? Om het even welke ideeën over hoe te te berekenen wat die verbindingen vragen / doen? Kunnen andere argumenten die u denkt nuttig zijn voor het diagnosticeren van iets als dit? - Daniel Magliola
Wel, R2 is redelijk veilig. Ik heb alles geüpgraded en heb nooit een probleem gehad. Hoe dan ook .... dit is een CPU-probleem en spijkeren kan vreselijk zijn, vooral gezien het feit dat je niet genoeg RAM hebt om een ​​profiler te installeren. Ik zou eigenlijk een volledige herinstallatie proberen. Ja, sucks, maar het betekent dat je R2 vers zou kunnen installeren en kijken of het probleem aanhoudt. Slecht ding is dat je geen reserveringssysteem hoeft te houden, dus je kunt niet vaststellen of het probleem "lokaal" of algemener is. Als alternatief: stop IIS, wis alle tijdelijke mappen die u gebruikt, ook - TomTom
voor compilatie en zie wat er gebeurt als u opnieuw opstart. Met R2 kon je zien of / welke bestanden opengehouden worden door IIS. Is dit lokaal voor één webtoepassing of is het ook beschikbaar als alle websites worden gestopt? Het volgende om te proberen - zet alle sites uit en ontdek welke dingen kapot gaan. - TomTom
Ten slotte is het probleem met virtuele servers dat, voor zover ik heb gevonden, we uiteindelijk meer of hetzelfde betalen voor dezelfde hardware, en dat de rekening voor de bandbreedte killer is (vergeet niet dat we audiobestanden serveren). We zullen naar een grotere server gaan als het moet, maar eerlijk gezegd, met het verkeer dat we hebben, moet er een probleem zijn, we zouden geen 100% CPU ooit moeten gebruiken .. - Daniel Magliola


Je zou kunnen proberen een programma te gebruiken met de naam Process Explorer om individuele threads te controleren die onder het w3wp-proces lopen. Het zou u moeten toestaan ​​om te zien welke draad alle schade veroorzaakt.


4
2017-10-27 21:04





Ik had echt veel succes met het Microsoft Debug Diagnostic Tool om mijn w3wp-proces te dumpen en vervolgens de threads te bekijken en traces te stapelen voor dingen die werden vergrendeld. Het zal je zelfs de gevraagde pagina vertellen die de thread heeft voortgebracht die dat is Super aardig.

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


3
2017-09-06 03:33





Ik ben het met TomTom eens op de achtergrond, vooral als het gaat om het verbeteren van het aantal kilometers vanaf een Virtual op dit punt. Lokaal debuggen / profileren om het probleem te beperken, is de juiste keuze.

Ik ga mijn Karnak The Magnificent muts en cape aantrekken en om de eerste envelop vragen. Ram Rebellion. Wat krijg je als je het besturingssysteem, ASP.NET en een hebzuchtige SQL Server Express in 1 GB zet.

Ik geloof dat uw probleem is dat SQL Server Express alle beschikbare RAM-geheugen voor een bufferpool trekt en dat deze langzaam wordt vrijgegeven. Zien http://support.microsoft.com/kb/321363 voor meer informatie. IIS heeft ook een standaardcache van 256 MB die u mogelijk moet aanpassen (https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage). Diagnostiek debuggen is een geweldige tool om dit op te lossen (ok, waarschijnlijk een voorhamer).

http://technet.microsoft.com/en-us/library/bb742546.aspx is een behoorlijk fatsoenlijk artikel om naar te kijken. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e wijst erop dat recycling van app-poolen gek is geworden als een ander mogelijk probleem.


1
2017-10-27 13:37





Gebruik de "Proces" -teller van Perfmon om de individuele kenmerken van het proces w3wp.exe te bekijken. Hoeveel van de CPU-tijd voor het werkproces is kerneltijd? Hoge kerneltijden kunnen een indicatie zijn van paging, maar u zegt dat u niet overtuigd bent. Andere mogelijkheden zijn duff-stuurprogramma's. Het werkproces heeft 23 threads actief, wat goed is, maar wat doen ze? Probeer ProcessExplorer van SysInternals eens wat meer te verkennen; U kunt ook zien welke TCP / IP-verbindingen er in het spel zijn. Ik heb geen SQL Express gebruikt, maar heeft het parameters voor geheugenafstemming, zoals zijn grote broer. Is SQL verhongeren IIS van geheugen, waardoor overmatige paging veroorzaakt?


1
2017-10-27 20:58



Laten we kijken of ik dit goed doe ... Ik heb de% -processortijd en% gebruikerstijdtellers toegevoegd, beide voor het w3wp-proces, en ze komen allebei perfect overeen met de hele tijd. Betekent dit dat er geen kerneltijd is, of kijk ik hier op de verkeerde manier naar? (sorry, ik ben een newbie op dit) - Daniel Magliola


Het is mogelijk niet volledig gerelateerd, maar controleer of u NOLOCK gebruikt in uw vragen. Het kan helpen in het geval van de SQL-time-outs.


0
2017-11-30 18:16