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.
I migawka niektórych liczników wydajności:
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
źródło
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:
Dla testów:
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;)
źródło
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.
źródło
Miałem naprawdę duże szczęście, używając narzędzia diagnostycznego debugowania firmy Microsoft, aby zrzucić mój proces w3wp, a następnie sprawdzić wątki i ślady stosu dla rzeczy, które się blokowały. Powie ci nawet żądaną stronę, która zrodziła wątek, który jest SUPER miły .
http://www.microsoft.com/en-us/download/details.aspx?id=26798
źródło
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.
źródło
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?
źródło
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.
źródło