konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Witam,
Od dwóch tygodni mamy problem z wydajnością jednego z naszych serwisów, w "godzinach szczytu"(Analytics pokazuje 170-250 os. w real-time) pożera całą dostępną pamięć (16GB). Normalny stan to 2-3GB. Przyrost pamięci nie jest zawsze taki sam, raz jest to gwałtowny 4-16 GB/2 min, innym razem wzrasta co jakiś czas po kilkaset -mega lub kilka -giga. Problem wygląda tak na obu serwerach(Server1 i Server2)

Konfiguracja serwerów wygląda u nas następująco:

Ruch pomiędzy serwerami rozdziela haproxy, aktualnie cały ruch trafia na Server1, a kiedy on przestanie odpowiadać dane zaczyna serwować Server2. Na Server3 znajduje się baza danych – MS SQL 2008 R2. Na Media znajdują się wszystkie pliki, które trafiają do folderu /media serwisu.
Server1, Server2,Server3 i Media są maszynami wirtualnymi postawionymi na tym samym serwerze fizycznym(Linux Debian KVM, najnowsza wersja libvirt z backportów, maszyny sprzętowo są stabilne).

Server1:
OS – Windows Server 2012 Standard
CPU – 8x2GHz
RAM -16GB
IIS8

Server2:
OS – Windows Server 2008 Web
CPU – 4x2GHz
RAM – 4GB
IIS7

Rzeczy wspólne dla obu serwerów:
Strona jest oparta na Umbraco 4.7, .net 4.0. Folder media podpięty jest jako „lokalizacja sieciowa” fizycznie znajduje się na osobnym serwerze Media(Linux Samba 3.x). W bazie mamy ~25000 węzłów.

Zauważyliśmy, że serwis intensywnie korzysta z połączenia z serwerem mediowym (do 200Mbit/s), wszystkie filmy przepuściliśmy tak aby omijały one IIS.

Serwis był przenoszony pomiędzy maszynami z OS Windows server 2008 i Windows server 2012 problem jednak nadal występował.

Myśleliśmy, że problem może powodować zmiana w kodzie, wycofaliśmy jednak wszystkie naniesione przez ostatni miesiąc zmiany, nie rozwiązało to jednak sprawy.

Używaliśmy już narzędzia DebugDiag oraz Ants Memory Profiler jednak nic nam to nie dało.


Obrazek


Obrazek


W jaki jeszcze sposób możemy sprawdzić co powoduje problem?

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Sprawdź ile w tym czasie masz requestów na sekundę ewentualnie ogranicz ich liczbę per IP.Ten post został edytowany przez Autora dnia 25.05.13 o godzinie 09:27

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Do serwisu trafia max 150 requestów/s, średnio 70 r/s. Próbowaliśmy już nałożyć ograniczenie na requesty, nie przyniosło to zmian. Aktualnie będziemy kombinować z różnymi wersjami kodu i bazy danych + testy obciążeniowe.

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

150 r/s to i tak mało.
Sprawdźcie co pokaże RAMMap:
http://technet.microsoft.com/en-us/sysinternals/ff700229

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Ewentualnie to co napisałem w komentarzu na devPytania.

Zróbcie zrzut pamięci w momencie jak jest taka zajętość i przeanalizujcie go w Visual Studio albo WinDbg + SOS.

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Dziękujemy za odpowiedź, sprawdzamy.

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Udało się przeanalizować? Jestem ciekaw co powodowało problem...

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Jeszcze nad tym pracujemy. Nikt z nas wcześniej nie zajmował się WinDbg i to wydłuża cały proces analizy.
Dump w visualu nie chce wystartować z powodu braku symboli.

Przeprowadziliśmy testy obciążeniowe programem wcat na serwerze testowym i okazało się, że sam serwis działa ok, problem natomiast występuje kiedy testom poddajemy zdjęcia. Wydaje nam się, że problem stwarza biblioteka imagegen, sprawdzamy to.

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Z WinDbg też nie korzystałem, ale w RAMMap macie wszystko na tacy gdzie ile ramu siedzi.
Poza tym taką ilość to nie trudno przeoczyć :)

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Sławomir B.:
Jeszcze nad tym pracujemy. Nikt z nas wcześniej nie zajmował się WinDbg i to wydłuża cały proces analizy.
Dump w visualu nie chce wystartować z powodu braku symboli.

Przeprowadziliśmy testy obciążeniowe programem wcat na serwerze testowym i okazało się, że sam serwis działa ok, problem natomiast występuje kiedy testom poddajemy zdjęcia. Wydaje nam się, że problem stwarza biblioteka imagegen, sprawdzamy to.

Symbole nie są potrzebne, ale pomagają w czytaniu.

Co do WinDbg to po odpaleniu WinDBG wystarczy załadować SOS
.loadby sos clr

A potem przejrzeć co siedzi w pamięci
!DumpHeap -stat


a potem to już sama przyjemność analizowania :)Ten post został edytowany przez Autora dnia 05.06.13 o godzinie 12:49

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Sławomir B.:

Obrazek


Obrazek


W jaki jeszcze sposób możemy sprawdzić co powoduje problem?

Tak z ciekawości (mam nadzieję, że problem już jest rozwiązny) - dlaczego wasz serwer odbiera 70 (pierwsze interface sieciowy) razy więcej danych, niż wysyła ?Ten post został edytowany przez Autora dnia 01.07.13 o godzinie 20:46

konto usunięte

Temat: Problem z pamięcią. Jak znaleźć przyczynę ?

Tak, problem został już rozwiązany.

Jakubie, właśnie to nas zaniepokoiło i postanowiliśmy to zbadać. Serwis pobierał ogromną ilość danych z serwera z mediami(filmy/zdjęcia/inne) i nie przesyłał tego dalej.
Zrobiliśmy obejście dla filmów, nie były już przepuszczane przez IIS, pozostały zdjęcia. Okazało się, że problem był z biblioteką imageGen, a raczej z jej cachem, po wyczyszczeniu i zaktualizowaniu biblioteki serwis odetchnął i do dziś działa stabilnie.

Dziękuję Wam za pomoc :)



Wyślij zaproszenie do