Skąd możesz wiedzieć, co robi plik w3wp.exe? (lub jak zdiagnozować problem z wydajnością)


42

Mam problem z wydajnością w utworzonej przez nas witrynie i nie jestem pewien, jak rozpocząć diagnozowanie.

Krótki opis: mamy bardzo małą stronę ( http://hearablog.com ) o bardzo małym ruchu, w kiepskim dedykowanym serwerze procesor jest zawsze bardzo wysoki, czasami utrzymuje się na 100% przez kilka minut, a w3wp.exe bierze większość. Typowy scenariusz to w3wp.exe zajmuje 60%, a SQL Server około 30%. Nasz DB też jest dość mały.

Długi opis i więcej szczegółów:

  • Witryna jest hostowana na bardzo gównianym serwerze przez Cari.Net. Od samego początku mieliśmy wrażenie, że serwer nie zachowywał się poprawnie, tak jakby niektóre rzeczy trwałyby zbyt długo, więc może to być problem z konfiguracją od samego początku. Może się zdarzyć, że otrzymamy serwer wirtualny, podczas gdy mamy mieć dedykowany serwer, chociaż nie mamy dowodów, które by to wskazywały, z wyjątkiem faktu, że serwer jest dość powolny.

  • Serwer to 64-bitowy system Windows 2008 Standard z SQL 2008 Express

  • Sprzęt to Celeron 2,80 GHz, pamięć RAM 1 Gb

  • Witryna została opracowana w ASP.Net MVC, przy użyciu Entity Framework do dostępu do danych.

  • Teraz jest to dość kiepski sprzęt, ale miałem inne serwery z tymi facetami, z równoważnym (lub gorszym) sprzętem, a wydajność jest znacznie lepsza niż ten. To powiedziawszy, inne serwery mają W2003 i SQL2005 i używam ASP.Net „WebForms” 2.0, bez MVC, bez LINQ, bez EF; więc nie jestem pewien, czy przejście na rok 2008 / inne rzeczy oznacza spodziewaną wysoką karę za wydajność.

  • Regularnie obsługuję pliki MP3 (5-20 Mb), co jest nieco nietypowym obciążeniem, może to powoduje jakieś problemy?
    Czy to spowodowałoby, że w3wp zużywałoby dużo procesora?

  • Wykorzystanie dysku wydaje się bardzo niskie. Pamięć zwykle wynosi około 90%, ale użycie dysku wydaje się wskazywać, że nie stroni dużo.

  • Codziennie otrzymuję mnóstwo e-maili o przekroczeniu limitu czasu SQL, dla zapytań trwających ponad 30 sekund, chociaż wszystkie nasze zapytania są dość proste (lub powinny być, ale EF może to popsuć).

Tak wygląda monitor zasobów w jednym z tych „sprintów” 100% procesora, na wypadek, gdyby było tam coś użytecznego.

alternatywny tekst

I migawka niektórych liczników wydajności: alternatywny tekst

Teraz bardzo mnie dezorientuje to, że użycie procesora w3wp jest tak wysokie. Naprawdę nie powinno to robić wiele ... Więc moje pytania ...

  • Czy jest jakiś sposób, aby dowiedzieć się „co” robi? Może nawet profilujesz?
  • Jakieś liczniki wydajności, na które powinienem patrzeć?
  • Czy należy się tego spodziewać, biorąc pod uwagę tę konfigurację sprzętu / oprogramowania?
  • Czy przyczyną może być jakiś błąd konfiguracji, od czego byś zaczął?

Dziękuję Ci bardzo.
Daniel Magliola

Odpowiedzi:


42

Możesz także użyć interfejsu użytkownika procesów roboczych w Menedżerze IIS i sprawdzić aktualnie wykonywane żądania i zobaczyć, gdzie się blokują, jeśli takie istnieją. Otwórz Menedżera IIS-> Kliknij serwer w drzewie-> Ikona procesów roboczych podwójnego kliknięcia-> Kliknij dwukrotnie proces roboczy, który zużywa procesor, aby zobaczyć aktualnie wykonywane żądania w czasie rzeczywistym, aby zobaczyć, który moduł zajmuje czas.

Zastanów się również nad wykorzystaniem śledzenia nieudanych żądań do śledzenia części czasu na żądanie, aby zobaczyć, gdzie zajmuje to dużo czasu.


2
Jest to obiecujące, właściwie brzmi dokładnie TO, co chcę zobaczyć, ale w rzeczywistości te ekrany są puste. Widocznie pokazuje tylko żądania trwające dłużej niż sekundę, zgodnie z dużym znakiem na górze, i żadne z naszych żądań nie jest ewidentnie, ponieważ lista jest pusta. Wszelkie pomysły na to, jak sprawić, by wyświetlał więcej żądań? Jak obniżyć filtr 1s? Dzięki!
Daniel Magliola

1
Możesz wpisać 0 w filtrze i kliknąć Go, co spowoduje ustawienie 0 sekund. Ponadto można uruchomić z wiersza polecenia z podwyższonym poziomem uprawnień „Żądania listy% windir% \ system32 \ inetsrv \ appcmd.exe”
Carlos Aguilar Mares

1
Dziękuję bardzo Carlos! To właśnie skończyłem, aby znaleźć jedno żądanie (mamy crona), które zabijało mój serwer co 5 minut (uruchomienie trwało 3,5 minuty, więc prawie zawsze było na 100% CPU). Dzięki!!!
Daniel Magliola

1
Ten interfejs użytkownika powiedział mi, do którego adresu URL uzyskano dostęp; niestety jest to POST dla usługi internetowej asmx i te dane nie są dostępne. (headbang)
Ross Presser

5

Ok, na początek - serwer jest NAPRAWDĘ kiepski. Ale powinno to wystarczyć.

  • W przypadku wirtualizacji sprawdź sterowniki. Nie znam żadnej platformy do wirtualizacji, która ukrywałaby procesor (i wytykam, że ktoś umieszcza hyper-v lub esx na celeronie), ale sterowniki dla dysku itp. Są wskazówką.

  • Procesor nie powinien być tak wysoki. Niestety, z tą pamięcią RAM jest toast - jeśli zaczniesz dodawać profiler, prawie zniszczysz swoją pamięć.

Ja bym:

  • Sprawdź dzienniki pod kątem działania wykonywanego w tym momencie.
  • Zaktualizuj system operacyjny do wersji 2008 R2 - jest tam dużo więcej informacji.

Dla testów:

  • W środowisku deweloperskim zrób kopię witryny i przeprowadź testy wydajności.
  • Wykonuj profilowanie.
  • Użyj śledzenia nieudanych żądań, aby dowiedzieć się, które żądania nie powiodły się.

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

ma jakiś początek. To może dać ci wskazówkę na wypadek, gdyby problemy były bardziej - hm - „możliwe do podzielenia na kategorie”.

Prowadziłbym również długoterminowe dzienniki wydajności. Uważaj na swoje IO (sekundy / odczyt, Sekundy / zapis są właściwie jedynymi istotnymi). Cała reszta jest zbyt ogólnikowa dla IO - ale gdy twoje IO zacznie działać dłużej niż powinno, dyski pozostaną w tyle.

Wykluczę w tym momencie problem z konfiguracją - przynajmniej jako główny wskaźnik. Coś zużywa twoje zasoby W3p, teraz musisz dowiedzieć się, co to jest.

Ogólnie rzecz biorąc, nie jest to serwer, który chciałbym mieć fizycznie - jest tak mały, że IMHO nie ma sensu, aby mieć tam maszynę. Wirtualny byłby lepszy;)


bardzo dziękuję za odpowiedź. kilka pytań: Które dzienniki sprawdziłbyś w tej chwili pod kątem działania? (przepraszam, jeśli to pytanie dla początkujących) - Zaktualizuj system operacyjny: możemy spróbować, ale obawiam się, że może to popsuć, być może, jak bezpieczne jest to? - Środowisko programistyczne: Problem polega na tym, że w moim środowisku programistycznym działa dobrze. Procesor jest nieistotny, żądania nie zawodzą itp.
Daniel Magliola

Co do dzienników we / wy: Właśnie dodałem wspomniane liczniki i wszystkie mają wartość 0, gdy procesor jest wysoki. Właśnie dodałem zrzut ekranu niektórych liczników wydajności, na które patrzę. Wiem, że migawka nie opowiada całej historii, ale te wartości wydają się być dość stabilne. Czy uważasz, że liczba obecnych połączeń (których nie mam wyjaśnienia) może stanowić problem? Jakieś pomysły na to, jak dowiedzieć się, o co proszą / robią te połączenia? Jakieś inne liczniki, które Twoim zdaniem mogą być przydatne do diagnozowania czegoś takiego?
Daniel Magliola

R2 jest całkiem bezpieczny. Ulepszyłem wszystko i nigdy nie miałem problemu. W każdym razie ... jest to problem z procesorem i przybijanie go może być straszne, szczególnie biorąc pod uwagę, że nie masz wystarczającej ilości pamięci RAM, aby zainstalować profiler. Właściwie to spróbowałbym dokonać pełnej ponownej instalacji. Tak, do bani, ale oznacza to, że możesz zainstalować R2 świeżo i sprawdzić, czy problem nadal występuje. Złą rzeczą jest to, że nie masz systemu rezerwowego, więc nie możesz stwierdzić, czy problem jest „lokalny”, czy bardziej ogólny. Alternatywnie: zatrzymaj IIS, wyczyść wszystkie używane foldery tymczasowe, a także
TomTom

do kompilacji i zobacz, co się stanie po ponownym uruchomieniu. Dzięki R2 możesz sprawdzić, czy / jakie pliki są otwarte przez IIS. Czy jest to aplikacja lokalna dla jednej aplikacji internetowej, czy też istnieje, jeśli wszystkie witryny są zatrzymane? Następna rzecz do wypróbowania - wyłącz wszystkie witryny i dowiedz się, która z nich coś psuje.
TomTom

Wreszcie problem z serwerami wirtualnymi polega na tym, że, o ile się przekonałem, ostatecznie płacimy więcej lub tyle samo za ten sam sprzęt, a ponadto rachunek za przepustowość jest zabójczy (pamiętaj, że obsługujemy pliki audio). Przeniesiemy się na większy serwer, jeśli będziemy musieli, ale szczerze mówiąc, przy ruchu, który mamy, musi być jakiś problem, nie powinniśmy nigdy używać 100% procesora ..
Daniel Magliola

4

Możesz spróbować użyć programu o nazwie Process Explorer do monitorowania poszczególnych wątków działających w procesie w3wp. Powinno to pozwolić ci zobaczyć, który nić powoduje wszystkie szkody.



1

Zgadzam się z TomTom w dalszej linii, szczególnie jeśli chodzi o uzyskanie lepszego przebiegu od Virtual w tym momencie. Lokalne debugowanie / profilowanie w celu zawężenia problemu jest właściwym rozwiązaniem.

Zamierzam założyć czapkę i pelerynę Karnaka Wspaniałego i poprosić o pierwszą kopertę. Rebelia ram. Co otrzymujesz, gdy umieścisz system operacyjny, ASP.NET i chciwy program SQL Server Express w 1 GB.

Uważam, że twój problem polega na tym, że SQL Server Express pobiera całą dostępną pamięć RAM dla puli buforów i bardzo długo ją zwalnia. Więcej informacji można znaleźć na stronie http://support.microsoft.com/kb/321363 . Ponadto IIS ma domyślną pamięć podręczną o wielkości 256 MB, którą możesz potrzebować dostosować ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Diagnostyka debugowania jest doskonałym narzędziem do rozwiązywania problemów (ok, prawdopodobnie młot).

http://technet.microsoft.com/en-us/library/bb742546.aspx to całkiem przyzwoity artykuł do obejrzenia. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e wskazuje, że recykling puli aplikacji oszalał jako kolejny możliwy problem.


1

Użyj licznika „Proces” Perfmon, aby zobaczyć indywidualne atrybuty procesu w3wp.exe. Ile czasu procesora dla procesu roboczego to czas jądra? Wysokie czasy jądra mogą wskazywać na stronicowanie, ale mówisz, że nie jesteś przekonany. Inne możliwości to sterowniki duff. Proces roboczy ma 23 wątki aktywne, co jest dobre, ale co robią? Wypróbuj ProcessExplorer firmy SysInternals, aby dowiedzieć się więcej; możesz także zobaczyć, jakie połączenia TCP / IP są w grze. Nie korzystałem z SQL Express, ale czy ma parametry dostrajania pamięci, jak jego starszy brat. Czy SQL głoduje IIS pamięci, powodując nadmierne stronicowanie?


Zobaczmy, czy robię to dobrze ... Dodałem liczniki% czasu procesora i% czasu użytkownika, oba dla procesu w3wp, i oba one idealnie do siebie pasują. Czy to oznacza, że ​​nie ma czasu jądra, czy też patrzę na to w niewłaściwy sposób? (przepraszam, jestem w tym nowicjuszem)
Daniel Magliola

0

Może to nie być całkowicie powiązane, ale sprawdź, czy używasz NOLOCK w swoich zapytaniach. Może to pomóc w przypadku przekroczenia limitu czasu SQL.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.