Jak wyjaśnić użycie pamięci w systemie Windows Server poza listą uruchomionych procesów


9

Mam system Windows 2003 Server działający nieco wolniej, w którym ładowanie zatwierdzenia i użycie pliku strony zaznaczają się i rosną, aż w końcu zrestartuję się. Aby to naprawić, muszę dowiedzieć się, co pochłania całą pamięć, i tu właśnie kryje się wielka tajemnica.

Bieżące statystyki z Menedżera zadań:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

Dobrze, więc pobierzmy SysInternals Process Explorer i sprawdź rozmiar działającego zestawu wszystkiego, co działa. Największym winowajcą jest instancja Tomcat używająca 121 980 KB WS, 481 284 KB VM. Nic nie wyjaśnia wyjaśnienia opłaty za zatwierdzenie w wysokości 5 GB.

Następny krok: SysInternals pslist : pslist -mpodziel dane wyjściowe według kolumn i oblicz sumy kolumn dla 61 raportowanych procesów.

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

Czy zasadniczo nie rozumiem, jakie narzędzia zgłaszają? Zawsze miałem wrażenie, że system operacyjny faktycznie poświęci dużo mniej pamięci niż pełna ilość pamięci wirtualnej zmapowanej przez proces, przy założeniu, że tak naprawdę nigdy nie zużyje tak dużo, a patrząc na maszynę wirtualną tutaj czerwony śledź.


1
Aktualizacja: Tak, ten system stronicuje i często pojawia się ostrzeżenie „Brak pamięci wirtualnej”. Za każdym razem, gdy pojawia się ostrzeżenie, sprawdzam statystyki pamięci i nie ma żadnego procesu, który wydaje się być wyjątkowo niewłaściwy, ale statystyka Memory, Committed Bytes ma zawsze ponad 5 GB.
jpdaigle

Odpowiedzi:


1

JP, wierzę, że twój komentarz, że jest to automatyczny serwer testowy kompilacji / jednostki, który działa mniej niż stabilny kod, mówi wszystko. Domyślam się, że ten serwer musi być często uruchamiany ponownie, ponieważ niestabilny kod działa na nim prawdopodobnie ma przecieki pamięci, które powodują objawy, które widzisz. Wycieki pamięci nie zostaną wymienione na żadnym z drzew procesów uruchomionych procesów, ponieważ są one przechwytywane przez procesy, które już nie istnieją, i są nadal przydzielane, mimo że proces z nimi związany już dawno zniknął.

Uzyskaj okno częstej konserwacji, aby umożliwić automatyczne ponowne uruchomienie tego komputera, być może co noc, kilka razy w tygodniu lub co tydzień, w zależności od szybkości, z jaką to zachowanie zaczyna wykazywać problemy z wydajnością.

Mamy już serwery Oracle Application Server na Windoze, które wymagały ponownego uruchamiania dwa razy dziennie. Wyrzucaliśmy użytkowników w porze lunchu i codziennie w środku nocy. To było kilka lat temu, przy rzekomo stabilnym kodzie produkcyjnym Oracle.


2

Przepraszam, że po prostu wkleiłem kilka linków - ale używamy pewnych technik, aby znaleźć wycieki pamięci, używając logparsera i PowerShell, więc podzielę się.

http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx

(Witryna Never Doubt Thy Debugger jest doskonała): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx

Podam również link do doskonałej wiedzy Marka Russinovicha na temat wykorzystania pamięci w systemie Windows:

http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1

Poza otwarciem rzeczywistych spraw Microsoft, witryna Performance Team ma również wiele dobrych informacji: http://blogs.technet.com/askperf/Default.aspx?p=2


1

Najważniejszym narzędziem pomagającym w zdiagnozowaniu tego jest perfmon. Liczniki, na które patrzę (na początek) to:

Pamięć, zatwierdzone bajty jest to miara zapotrzebowania na
proces pamięci wirtualnej Proces, zestaw roboczy, _Całkowita pamięć wirtualna w „aktywnym” użyciu
pliku stronicowania,% używanego pliku stronicowania
Pamięć, Strony / s (niekoniecznie jest to wskaźnik niskiego poziomu pamięci , chociaż wydaje się, że wszyscy tak twierdzą)
Pamięć, liczba stron na wyjściu / s, ile stron pamięci wirtualnej zapisano w pliku stronicowania w celu zwolnienia ramek strony RAM do innych celów w ciągu sekundy

Pamięć, pamięć podręczna bajtów
, pula bajtów niestronicowanych
Pamięć, pamięć bajtów stronicowanych
, kod systemowy Całkowita
pamięć bajtów , sterownik systemowy Całkowita liczba bajtów

gdy suma ta zbliży się do 2 GB, będziesz mieć problemy z wydajnością, zwykle z powodu architektury 32-bitowej

Pamięć, dostępne bajty - mierzy ilość dostępnej pamięci RAM, aby zaspokoić zapotrzebowanie na pamięć wirtualną (nowe przydziały lub przywrócenie strony z pliku strony).

Zobacz także http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


Ciekawy link. Na tym serwerze widzę całkowity zestaw roboczy procesu na 640 MB, ale „Pamięć, zatwierdzone bajty” to 5,4 GB. Żaden z innych wspomnianych liczników nie jest bardzo wysoki. Często pojawia się ostrzeżenie „Brak pamięci wirtualnej”, dlatego badam. Dodanie komentarza do PO.
jpdaigle

1

Jak długo ten serwer działa od ostatniego restartu? To niefortunny fakt, że w systemie Windows występują wycieki pamięci. tzn. przydzielona pamięć nie zawsze jest zwalniana z powrotem do systemu. Objawy są dokładnie tym, co widzisz. Jeśli jeszcze tego nie zrobiłeś, sugeruję ponowne uruchomienie przynajmniej raz w tygodniu. Wiele centrów danych codziennie uruchamia system Windows ponownie, ponieważ znacznie zmniejsza to liczbę wezwań pomocy technicznej. Oczywiście jest to o wiele łatwiejsze, gdy używasz klastrów, ponieważ nie ma przestojów.


0

Mówi się, że jest gdzieś sysadmin, który naprawdę rozumie statystyki pamięci Windows, ale nigdy ich nie spotkałem.

Jednak zwykle nie jest zbyt trudno znaleźć niewłaściwie działający proces. Spróbuj użyć Perfmon, aby spojrzeć na różne liczniki procesów, takie jak uchwyty lub Błędy strony / s.

JR

Dalsze przemyślenia: czy na pewno masz mało pamięci. Kluczową sprawą jest to, czy dostajesz wywoływanie. Jeśli nie ma stronicowania, brakuje Ci pamięci. Używając PerfMon, spójrz na licznik Pamięć - Strony / s.


Nie widzę nic oczywistego w uruchomionych procesach. Czy jest jakiś możliwy sposób, aby system operacyjny nie odzyskiwał pamięci po zakończeniu procesu? Jest to zautomatyzowany serwer testowy build / szt więc oczywiście procesy rozbić cały czas, jak to zawsze działa krwawienie krawędzi buduje automatycznie zbudowane z SVN.
jpdaigle

Zobacz moją edycję, aby uzyskać dalsze przemyślenia
John Rennie,

0

Pamiętaj, że zestaw roboczy to bit pamięci, który jest faktycznie reprezentowany przez PRAWDZIWĄ pamięć fizyczną. masz także opłatę za pamięć wirtualną, a system Windows udostępnia udostępnianie stron kodowych, niektóre fragmenty MFC będą udostępniane wielu procesom bez powielania użycia pamięci. Ponadto masz nieustające pragnienie, aby system Windows utrzymywał pamięć podręczną systemu plików tak dużą, jak to możliwe (wcześniej widziałem, jak balon zwiększa się do 800 MB na laptopie o pojemności 2,5 GB).

Zarządzanie pamięcią systemu Windows jest bardzo solidne. Jednak gdy system Windows zaczyna stronicować, robi się brzydko i ZAWSZE musisz zostawić miejsce na pamięć podręczną systemu plików - zawsze zawsze. Rutynowo muszę wyłączać i ponownie uruchamiać Firefoksa, gdy moje karty z ponad 80 kartami zużywają pamięć do 1,2 gb / 1,2 + gb.

System Windows również zaciera nieco linię między stronami znajdującymi się w pamięci podręcznej a stronami wymienionymi jako pamięć / zestaw roboczy.

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.