8 min

Mark Russinovich i Windows Internals: obserwowalność i niezawodność

Dowiedz się, jak podejście Marka Russinovicha z Windows Internals ukształtowało Sysinternals, workflowy WinDbg i praktyczną obserwowalność do debugowania i zwiększania niezawodności na Windows.

Mark Russinovich i Windows Internals: obserwowalność i niezawodność

Dlaczego Mark Russinovich wciąż ma znaczenie dla operacji Windows

Jeśli uruchamiasz Windows w produkcji — na laptopach, serwerach, VDI lub VM w chmurze — prace Marka Russinovicha nadal mają wpływ na codzienne operacje. Nie dlatego, że to kwestia osobowości czy nostalgii, lecz dlatego że spopularyzował podejście „evidence-first” do rozwiązywania problemów: najpierw sprawdź, co system naprawdę robi, a potem wyjaśnij symptomy dowodami.

Trzy proste idee

Obserwowalność oznacza, że potrafisz odpowiedzieć „co się dzieje teraz?” korzystając z sygnałów, które system generuje (zdarzenia, śledzenia, liczniki). Gdy usługa zwalnia albo logowania wiszą, obserwowalność to różnica między zgadywaniem a wiedzą.

Debugowanie to przekształcenie nieokreślonego problemu ("zawiesił się") w konkretny mechanizm ("ten wątek oczekuje na I/O", "ten proces intensywnie korzysta z pliku wymiany", "wstrzyknięcie DLL zmieniło zachowanie").

Niezawodność to zdolność do pracy pod obciążeniem i przewidywalnego odzysku — mniej incydentów, szybsze przywrócenia i bezpieczniejsze zmiany.

Dlaczego wiedza o internals przyspiesza rozwiązywanie incydentów

Większość „tajemniczych awarii” wcale nie jest tajemnicami — to zachowania Windows, których jeszcze nie zmapowałeś: wycieki uchwytów, rozbiegające się procesy potomne, zablokowane sterowniki, opóźnienia DNS, uszkodzone wpisy auto-start, albo narzędzia zabezpieczające dodające narzut. Podstawowe rozumienie wewnętrzności Windows (procesy, wątki, uchwyty, usługi, pamięć, I/O) pomaga szybko rozpoznać wzorce i zebrać właściwe dowody zanim problem zniknie.

Co pomoże Ci ten artykuł

Skoncentrujemy się na praktycznych, przyjaznych dla operacji workflowach z użyciem:

  • Sysinternals (zwłaszcza Process Explorer i Process Monitor) dla szybkiej, niskotrenażowej widoczności
  • ETW tracing gdy logi nie wystarczają i potrzebujesz dokładnej linii czasu „co się stało”
  • WinDbg i zrzutów crash/hang, by przekształcić awarie w użyteczne przyczyny źródłowe

Celem nie jest uczynić z Ciebie inżyniera jądra. Chodzi o to, by incydenty Windows były krótsze, spokojniejsze i łatwiejsze do wytłumaczenia — dzięki temu poprawki są bezpieczniejsze i powtarzalne.

Windows Internals jako supermoc do debugowania

„Internals” Windows to po prostu zbiór mechanizmów, za pomocą których Windows wykonuje pracę: planowanie wątków, zarządzanie pamięcią, uruchamianie usług, ładowanie sterowników, obsługa plików i rejestru oraz egzekwowanie granic bezpieczeństwa. Praktyczna obietnica jest prosta: gdy rozumiesz, co system robi, przestajesz zgadywać i zaczynasz wyjaśniać.

To ważne, ponieważ większość objawów operacyjnych jest pośrednia. „Maszyna jest wolna” może oznaczać konkurencję o CPU, pojedynczy gorący wątek, burzę przerwań sterownika, presję stronicowania lub filtr antywirusowy blokujący I/O. „Zawiesza się” może być skutkiem zakleszczenia, zablokowanego wywołania sieciowego, timeoutu magazynu lub usługi czekającej na zależność. Problemy z rozruchem to często uszkodzony wpis autorun, nieudane ładowanie sterownika lub skrypt polityki, który nigdy się nie kończy. Wiedza o internals zmienia niejasne skargi w testowalne hipotezy.

Tryb użytkownika vs. jądro (tyle, by było użyteczne)

Na ogólnym poziomie tryb użytkownika to miejsce, gdzie działają większość aplikacji i usług. Gdy się wywracają, zwykle zabierają tylko siebie. Tryb jądra to miejsce, gdzie działa sam Windows i sterowniki; problemy tam mogą zamrozić cały system, sprowokować bugcheck (blue screen) lub cicho pogarszać niezawodność.

Nie potrzebujesz głębokiej teorii, by użyć tej dychotomii — wystarczy tyle, by wybrać dowody. Aplikacja mocno obciążająca CPU to często tryb użytkownika; powtarzające się resetowanie urządzeń pamięci masowej lub problemy ze sterownikiem sieci często wskazują na jądro.

Troubleshooting „evidence-first"

Myślenie Russinovicha — widoczne w narzędziach Sysinternals i w książce Windows Internals — to „najpierw dowód”. Zanim zmienisz ustawienia, zresetujesz maszynę na ślepo czy przeinstalujesz, zarejestruj, co system robi: który proces, który wątek, który uchwyt, który klucz rejestru, jakie połączenie sieciowe, który sterownik, jakie zdarzenie.

Gdy potrafisz odpowiedzieć „co Windows robi teraz i dlaczego”, naprawy stają się mniejsze, bezpieczniejsze i łatwiejsze do uzasadnienia — a praca nad niezawodnością przestaje być gaśnicą pożarów.

Podejście Sysinternals: uczynić niewidoczne widocznym

Sysinternals najlepiej rozumieć jako zestaw narzędzi do widoczności Windows: małe, przenośne narzędzia, które ujawniają, co system naprawdę robi — proces po procesie, uchwyt po uchwycie, klucz rejestru po kluczu. Zamiast traktować Windows jako czarną skrzynkę, Sysinternals pozwala obserwować zachowanie kryjące się za objawami typu „aplikacja jest wolna”, „CPU jest wysokie” czy „serwer traci połączenia”.

Ufaj, ale weryfikuj: nie zgaduj, mierz

Wiele problemów operacyjnych bierze się z rozsądnie brzmiących przypuszczeń: to musi być DNS, pewnie antywirus, Windows Update znowu utknął. Podejście Sysinternals jest proste: zrób hipotezę, ale zweryfikuj ją dowodami.

Gdy widzisz, który proces zużywa CPU, który wątek czeka, jaka ścieżka pliku jest eksploatowana lub która wartość rejestru jest ciągle nadpisywana, przestajesz debatować nad opiniami i zaczynasz zawężać przyczyny. Ta zmiana — z narracji na pomiar — sprawia, że wiedza o internals staje się praktyczna, nie akademicka.

Dlaczego Sysinternals jest cenny podczas incydentów na żywo

Narzędzia te są stworzone na moment „wszystko płonie":

  • Niski próg wejścia: wiele narzędzi działa bez instalacji i uruchamia się szybko.
  • Szybka informacja zwrotna: możesz w minutach potwierdzić lub odrzucić tezę.
  • Skupiona widoczność: każde narzędzie odpowiada na określoną klasę pytań (procesy, elementy startowe, punkty sieciowe, użycie pamięci).

To ważne, gdy nie możesz sobie pozwolić na długi cykl konfiguracji, rozsyłanie ciężkich agentów czy reboot tylko po to, by zebrać lepsze dane.

Zasady bezpiecznego użycia

Sysinternals jest potężny i wymaga zasad:

  • Uruchamiaj według potrzeb: zaczynaj od obserwacji tylko do odczytu; podnoś uprawnienia tylko gdy to konieczne.
  • Dokumentuj działania: zapisuj znaczniki czasu, filtry i wykonane akcje, by wyniki dało się powtórzyć.
  • Minimalizuj zakłócenia: wol preferuj zbieranie dowodów (zrzuty ekranu, logi, eksportowane ślady) niż „próby naprawy” w trakcie incydentu.
  • Zmieniaj ostrożnie: jeśli musisz zmienić ustawienie lub zabić proces, zapisz powód i oczekiwany efekt, a potem zweryfikuj wyniki.

Stosowane w ten sposób, narzędzia Sysinternals stają się zdyscyplinowaną metodą: obserwuj niewidoczne, mierz prawdę i wprowadzaj zmiany uzasadnione, nie oparte na nadziei.

Process Explorer & Process Monitor: para do codziennego debugowania

Jeśli w zestawie admina trzymasz tylko dwa narzędzia Sysinternals, niech to będą Process Explorer i Process Monitor. Razem odpowiadają na najczęstsze pytania „co Windows robi teraz?” bez agenta, rebootu czy ciężkiej konfiguracji.

Process Explorer: szybkie odpowiedzi w kilka sekund

Process Explorer to Menedżer zadań z rentgenem. Gdy maszyna jest wolna lub niestabilna, pomaga ustalić który proces jest odpowiedzialny i z czym jest powiązany.

Szczególnie przydatny do:

  • CPU i wątki: który proces pali CPU i czy to jeden gorący wątek, czy ich wiele?
  • Relacje rodzic/dziecko: co uruchomiło proces (usługa, zadanie zaplanowane, updater czy użytkownik)?
  • DLL i uchwyty: jakie moduły są załadowane i jakie pliki/klucze/pipy proces ma otwarte?

Ten ostatni punkt to siła niezawodności: „dlaczego nie mogę usunąć tego pliku?” często odpowiada „ta usługa trzyma uchwyt do niego”.

Process Monitor: pełna ścieżka aktywności

Process Monitor (Procmon) przechwytuje szczegółowe zdarzenia w zakresie systemu plików, rejestru i aktywności procesów/wątków. To narzędzie do pytań typu: „co się zmieniło, gdy aplikacja zawiesiła się?” lub „co powoduje tłuczenie dysku co 10 minut?”

Przed włączeniem Capture sformułuj pytanie:

  • Jaki jest objaw (wolne logowanie, wysoki dysk, crash, access denied)?
  • Kiedy to się dzieje (przy starcie, o 09:00, po uśpieniu)?
  • Która maszyna i kontekst użytkownika (tylko jeden serwer, tylko jeden profil, tylko przez VPN)?

Przechwytuj tylko to, czego potrzebujesz (szum jest wrogiem)

Procmon może przytłoczyć, jeśli nie filtrujesz agresywnie. Zacznij od:

  • Filtra po konkretnym Process Name lub PID.
  • Reguł Include dla ścieżki, która Cię interesuje (np. folder konfiguracji) i wyklucz resztę.
  • Zbieraj przez krótki okres wokół objawu, potem zatrzymaj.

Co z tego uzyskasz

Typowe, praktyczne wyniki: zidentyfikowanie usługi, która nieprawidłowo pyta o brakujący klucz rejestru; wykrycie „real-time” skanera dotykającego tysięcy plików; znalezienie nieudanego ładowania DLL („NAME NOT FOUND”), które tłumaczy dlaczego aplikacja nie uruchamia się na jednej maszynie, a na innej tak.

Autoruns, TCPView, RAMMap: szybkie wskazówki bez ciężkiej konfiguracji

Zacznij mało i skaluj
Zacznij od darmowego planu i skaluj w miarę rozwoju narzędzi niezawodności.

Gdy maszyna Windows „nie działa jak trzeba”, często nie potrzebujesz pełnego stosu monitoringu, by ruszyć z miejsca. Mały zestaw narzędzi Sysinternals szybko odpowie na trzy praktyczne pytania: co startuje automatycznie? co rozmawia w sieci? gdzie podziała się pamięć?

Autoruns: niezawodność zaczyna się przy starcie

Autoruns to najszybszy sposób, by zrozumieć wszystko, co może uruchomić się bez interwencji użytkownika: usługi, zadania zaplanowane, rozszerzenia powłoki, sterowniki i więcej.

Dlaczego to ważne dla niezawodności: elementy startowe są częstym źródłem wolnego rozruchu, przerywanych zawieszeń i spike’ów CPU pojawiających się po zalogowaniu. Jeden niestabilny updater, pomocnik starego sterownika czy uszkodzone rozszerzenie powłoki może pogorszyć działanie całego systemu.

Praktyczna wskazówka: skup się na wpisach niepodpisanych, ostatnio dodanych lub błędnie ładujących się. Jeśli wyłączenie pozycji stabilizuje maszynę, przekształciłeś niejasny objaw w konkretny komponent do aktualizacji, usunięcia lub zastąpienia.

TCPView: potwierdź kto nasłuchuje, kto rozmawia

TCPView daje natychmiastową mapę aktywnych połączeń i portów nasłuchu, powiązanych z nazwami procesów i PID. To idealne narzędzie do szybkich kontroli zdrowia:

  • nieoczekiwane porty w stanie LISTENING (zwłaszcza na serwerach, które powinny być ciche)
  • pojedynczy proces posiadający wyjątkowo dużą liczbę połączeń
  • szybka rotacja połączeń korelująca z CPU lub opóźnieniami

Nawet w przypadku śledztw nie-szpiegowskich, może to ujawnić rozbiegające się agenty, źle skonfigurowane proxy lub „burze retryów”, gdzie aplikacja wydaje się wolna, a przyczyną jest zachowanie sieciowe.

RAMMap: presja pamięci bez zgadywania

RAMMap pomaga zinterpretować presję pamięci, pokazując gdzie RAM jest faktycznie alokowany.

Przydatne rozróżnienie:

  • Working set: pamięć fizyczna używana aktywnie przez procesy
  • Cache / standby: dane trzymane przez Windows, by przyspieszyć dostęp (niekoniecznie „złe")

Jeśli użytkownicy zgłaszają „mało pamięci”, a Menedżer zadań wygląda myląco, RAMMap potwierdzi, czy masz rzeczywisty wzrost procesów, duży cache plików czy sterownik zużywający pamięć niepaged.

Opcjonalnie: Handle i VMMap gdy podejrzewasz wycieki

Jeśli aplikacja zwalnia w ciągu dni, Handle pokaże rosnące liczby uchwytów (klasyczny wzorzec wycieku). VMMap pomaga, gdy użycie pamięci jest dziwne — fragmentacja, duże zarezerwowane regiony lub alokacje, które nie pojawiają się jako proste „private bytes”.

Powtarzalna 15-minutowa lista kontrolna

  1. Autoruns: przeskanuj nowe/niepodpisane wpisy; wyłączaj jedną podejrzaną pozycję.
  2. TCPView: zweryfikuj spodziewane nasłuchy; zidentyfikuj właścicieli głównych połączeń.
  3. RAMMap: sprawdź, czy presja to wzrost working set czy cache/standby.
  4. Jeśli objawy są czasowe: zrób szybkie „przed/po” migawki (liczniki, porty, sumaryczna pamięć).
  5. Jeśli widać wzrost: użyj Handle/VMMap do potwierdzenia wzorca wycieku.
  6. Zapisz podejrzany komponent i dowody, by naprawa była ukierunkowana, a nie zgadywana.

Od logów do ETW: budowanie prawdziwej obserwowalności na Windows

Operacje na Windows często zaczynają się od najłatwiejszych do złapania rzeczy: Podglądu zdarzeń i kilku zrzutów z Menedżera zadań. To dobre na okruszki, ale rzetelna reakcja na incydenty potrzebuje trzech typów sygnałów: logów (co się stało), metryk (jak bardzo to było złe) i śledzeń (co system robił krok po kroku).

Dzienniki zdarzeń: świetne wskazówki, ale z ograniczeniami

Dzienniki zdarzeń Windows są doskonałe dla tożsamości, cykli życia usług, zmian polityk i błędów aplikacji. Są też nierównomierne: niektóre komponenty logują obficie, inne oszczędnie, a tekst komunikatów bywa niejasny ("The application stopped responding"). Traktuj je jako oś czasu, nie cały obraz.

Typowe sukcesy:

  • zdarzenia start/stop usług i crashy
  • zdarzenia uwierzytelniania i autoryzacji
  • wyjątki aplikacji (gdy aplikacje faktycznie je logują)

Metryki podczas awarii: kilka liczników, które zwykle się liczą

Liczniki wydajności odpowiadają „czy maszyna jest zdrowa?” Podczas awarii zacznij od:

  • CPU: długotrwałe wysokie CPU, ready time (VM), CPU na proces
  • Dysk: długość kolejki, opóźnienia odczytu/zapisu, IOPS, wolne miejsce
  • Pamięć: committed bytes, commit limit, hard faults/sec, użycie pul pamięci
  • Sieć: retransmisje, błędy, bajty/sec, liczba połączeń

Metryki nie powiedzą ci dlaczego wystąpił spike, ale powiedzą kiedy się zaczął i czy się poprawia.

ETW prostymi słowami: strukturalne, wysokowolumetryczne śledzenie

Event Tracing for Windows (ETW) to wbudowany rejestrator systemu. Zamiast ad-hoc wiadomości tekstowych, ETW emituje ustrukturyzowane zdarzenia z jądra, sterowników i usług z wysoką częstotliwością — aktywność procesów/wątków, I/O plików, dostęp do rejestru, TCP/IP, planowanie i więcej. Na tym poziomie wiele „tajemniczych zacięć” staje się wytłumaczalnych.

Wybieranie sygnałów (bez zbierania wszystkiego)

Praktyczna zasada:

  • Logi używaj do dyskretnych zdarzeń (crash, restart, błąd auth)
  • Metryki do wykrywania i kwantyfikacji wpływu (opóźnienia, nasycenie)
  • ETW gdy potrzebujesz przyczynowości (co blokowało, które I/O, która ścieżka wywołań)

Unikaj „włączania wszystkiego na zawsze”. Trzymaj mały, zawsze włączony baseline (kluczowe logi + podstawowe metryki) i używaj krótkich, ukierunkowanych przechwyceń ETW podczas incydentów.

Korelacja czasowa to supermoc

Najszybsze diagnozy pochodzą z wyrównania trzech zegarów: raportów użytkowników ("10:42 zawiesiło się"), punktów zwrotnych metryk (spike CPU/dysk) i zdarzeń/logów/ETW z tym samym znacznikiem czasu. Gdy Twoje dane mają spójny czas, awarie przestają być zgadywaniem i stają się narracją, którą możesz zweryfikować.

Telemetria Sysmon: sygnały bezpieczeństwa, które pomagają też niezawodności

Domyślne dzienniki Windows są użyteczne, ale często nie pokazują „dlaczego teraz?” — detali operatorom potrzebnych, gdy coś zmienia się niespodziewanie. Sysmon (System Monitor) wypełnia tę lukę, rejestrując zdarzenia o wyższej rozdzielczości dotyczące aktywności procesów i systemu — zwłaszcza uruchomień, mechanizmów trwałości i zachowań sterowników.

Co Sysmon dodaje (ponad domyślne logi)

Siła Sysmon to kontekst. Zamiast samego „usługa uruchomiona”, często widzisz który proces ją uruchomił, z pełną linią poleceń, procesem nadrzędnym, hashami, kontem użytkownika i czystymi znacznikami czasu do korelacji.

To przydatne dla niezawodności, bo wiele incydentów zaczyna się od „małych” zmian: nowe zadanie zaplanowane, cichy updater, niechciany skrypt lub sterownik, który zachowuje się źle.

Minimalna konfiguracja: zacznij wąsko celowo

Konfiguracja „loguj wszystko” rzadko jest dobrym pierwszym krokiem. Zacznij od minimalnego, niezawodnościowego zestawu i rozszerzaj tylko gdy masz jasne pytania.

Dobre wczesne kandydatury:

  • Utworzenie procesu (nieoczekiwane uruchomienia, podejrzane linie poleceń)
  • Ładowanie sterownika (nowe lub zmieniające się komponenty jądra)
  • Ładowanie obrazu/DLL (używaj selektywnie dla problemów z zależnościami)
  • Aktywność usług i zadań zaplanowanych (trwałość i zmiany w tle)
  • Połączenia sieciowe / DNS (włączaj tylko dla określonych śledztw, by kontrolować wolumen)

Dostosuj z ukierunkowanymi regułami include (kluczowe ścieżki, konta usługowe, ważne serwery) i starannie dobranymi exclude (hałaśliwe updatery, zaufane agentury zarządzające), by sygnał pozostał czytelny.

Przykłady zastosowań w niezawodności

Sysmon często pomaga potwierdzić lub wykluczyć scenariusze „tajemniczej zmiany”:

  • nowy proces pomocniczy uruchamia się pod kontem usługi tuż przed spike’ami CPU
  • plik binarny usługi zmienia ścieżkę lub typ startu po cyklu łat
  • aktualizacja sterownika koreluje z nowymi zawieszeniami, bugcheckami lub resetami storage/sieci

Ostrzeżenia operacyjne

Testuj wpływ na reprezentatywnych maszynach. Sysmon może zwiększyć I/O dysku i wolumen zdarzeń, a centralne zbieranie może szybko stać się kosztowne.

Traktuj też pola takie jak linie poleceń, nazwy użytkowników i ścieżki jako wrażliwe. Stosuj kontrolę dostępu, limity retencji i filtrowanie przed szerokim wdrożeniem.

Uzupełnia, nie zastępuje reszty obserwowalności

Sysmon najlepiej traktować jako wartościowe okruszki. Używaj go wraz z ETW do głębokich pytań wydajnościowych, metryk do wykrywania trendów i zdyscyplinowanych notatek incydentowych, żeby móc połączyć co się zmieniło z tym, co się zepsuło i jak to naprawiłeś.

WinDbg i zrzuty: jak przekształcić crashy i zawieszenia w odpowiedzi

Ustandaryzuj filtry Procmon
Zrób aplikację z biblioteką szablonów filtrów Procmon i notatkami do rozwiązywania problemów.

Gdy coś „po prostu pada”, najcenniejszym artefaktem bywa często plik zrzutu: migawka pamięci plus stan wykonania, pozwalające odtworzyć, co proces (lub OS) robił w momencie awarii. W przeciwieństwie do logów, zrzuty nie wymagają przewidzenia właściwego komunikatu — rejestrują dowód po fakcie.

Czym są zrzuty i dlaczego ich chcesz

  • Zrzuty crashów aplikacji (user mode) rejestrują pojedynczy proces. Są idealne, gdy jedna usługa umiera, a system działa dalej.
  • Zrzuty jądra (systemowe) używa się dla bugchecków (BSOD) i zawierają stan jądra, sterowniki i wątki jądra.

Zrzuty mogą wskazać konkretny moduł, ścieżkę wywołań i typ błędu (naruszenie dostępu, korupcja sterty, deadlock, błąd sterownika), co trudno wywnioskować na podstawie samych objawów.

Podstawy WinDbg: symbole, stosy i „co zawiodło"

WinDbg zmienia zrzut w opowieść. Najważniejsze:

  • Symbole mapują surowe adresy na nazwy funkcji i informacje o liniach. Bez właściwych symboli analiza szybko staje się zgadywaniem.
  • Stosy wywołań pokazują sekwencję wywołań prowadzącą do crashu lub bieżący stan „zablokowanego” wątku.
  • Celem jest zidentyfikowanie zawodzącego komponentu: Twój kod, zależna DLL, sterownik, antywirusowy shim, stos grafiki itp.

Typowy workflow: otwórz zrzut → wczytaj symbole → uruchom automatyczną analizę → zweryfikuj najwyższe stosy i zaangażowane moduły.

Crash vs. BSOD vs. hang: nie mieszaj kategorii

  • Bugcheck (BSOD): cały system się zatrzymuje. Spodziewaj się zrzutów jądra i pracy nad sterownikami/przyczyną.
  • Crash aplikacji: terminowany jest pojedynczy proces. Oczekuj zrzutów user-mode i kodów wyjątków.
  • Hang: nic nie „pada”, ale praca stoi. Potrzebujesz dowodów, co wątków jest w stanie oczekiwania.

Hangi wymagają dowodów: stosy, oczekiwania i blokady

„Zawiesiło się” to objaw, nie diagnoza. Dla hangów zrób zrzut, gdy aplikacja jest nieodpowiedzialna i sprawdź:

  • Stosy wątków aby zobaczyć, co każdy wątek robi
  • Powody oczekiwania (I/O, RPC, mutex/critical section, sieć)
  • Wzorce blokad/konkurencji — często wątek UI czeka na worker, który z kolei jest zablokowany gdzie indziej

Realistyczne oczekiwania: samodzielna diagnoza vs eskalacja

Często możesz samodzielnie zdiagnozować oczywiste problemy (powtarzalne crashy w jednym module, ewidentne deadlocki, silna korelacja z konkretną DLL/sterownikiem). Eskaluj, gdy zrzuty wskazują sterowniki firm trzecich, komponenty jądra lub gdy brakuje symboli/dostępu do kodu źródłowego — wtedy może być potrzebny dostawca (lub Microsoft), by odczytać pełny łańcuch przyczyn.

Typowe wzorce awarii i jak internals je wyjaśnia

Wiele „tajemniczych” problemów Windows powtarza te same wzorce. Różnica między zgadywaniem a naprawą to zrozumienie, co system robi — a model mentalny Internals/Sysinternals pomaga to zobaczyć.

Wycieki pamięci: working set vs. commit

Gdy ludzie mówią „aplikacja wycieka pamięć”, często mają na myśli dwóch rzeczy.

Working set to fizyczna pamięć aktualnie przypisana procesowi. Może się ona wahać, gdy Windows przycina jej część pod presją.

Commit to ilość pamięci wirtualnej, którą system obiecał zrealizować RAMem lub plikiem wymiany. Jeśli commit rośnie wciąż w górę, masz realne ryzyko wycieku: doprowadzi to do osiągnięcia limitu commit i błędów alokacji lub niestabilności hosta.

Częsty objaw: Menedżer zadań pokazuje „dostępną pamięć”, ale maszyna i tak zwalnia — bo ograniczeniem jest commit, nie wolna pamięć.

Wycieki uchwytów: powolna awaria wyglądająca jak losowość

Uchwyt to referencja do obiektu OS (plik, klucz rejestru, event, sekcja itd.). Jeśli usługa przecieka uchwyty, może działać godziny lub dni, a potem zaczyna się sypać dziwnymi błędami (nie można otworzyć plików, nie można utworzyć wątków, nie można zaakceptować połączeń), gdy liczba uchwytów na proces rośnie.

W Process Explorer obserwuj trend liczby uchwytów w czasie. Stały wzrost to silna wskazówka, że usługa „zapomina zamykać” coś.

Problemy dysku i systemu plików: opóźnienia, retry, filtry

Problemy ze storage nie zawsze objawiają się wysokim przepływem; często widzisz duże opóźnienia i retry. W Process Monitorze szukaj:

  • powtarzających się operacji CreateFile/ReadFile
  • zdarzeń I/O o długim czasie trwania
  • dużej ilości NAME NOT FOUND / PATH NOT FOUND (niepoprawne ścieżki)

Zwróć też uwagę na filter drivers (AV, backup, DLP). Mogą wstrzykiwać się w ścieżkę I/O i dodawać opóźnienia lub błędy bez żadnej winy po stronie aplikacji.

Spike’i CPU: jeden gorący proces vs. konkurencja

Pojedynczy gorący proces jest prosty: jeden wykonywalny spala CPU.

Systemowa konkurencja jest trudniejsza: CPU wysokie, bo wiele wątków jest gotowych i walczy o blokady, dysk lub pamięć. Myślenie internals skłania do pytania: „Czy CPU wykonuje użyteczną pracę, czy kręci się w miejscu czekając na coś innego?”

Problemy sieciowe: kto jest właścicielem połączenia?

Gdy występują timeouty, zamapuj proces → połączenie za pomocą TCPView lub Process Explorer. Jeśli zła aplikacja ma socket, masz konkretną przyczynę. Jeśli właściwy proces ma socket, patrz na wzorce: próby SYN, długie połączenia bez aktywności lub lawina krótkich połączeń sugerują problemy DNS/firewall/proxy, a nie „aplikacja nie działa”.

Praktyczny workflow: Observe → Capture → Explain → Fix

Udostępnij swoje projekty
Udostępniaj to, co zbudujesz, twórz treści i zdobywaj kredyty platformowe dla konta.

Praca nad niezawodnością staje się łatwiejsza, gdy każdy incydent podąża tą samą ścieżką. Celem nie jest „uruchomić więcej narzędzi”, lecz podejmować lepsze decyzje z konsekwentnymi dowodami.

1) Odtwórz (lub zdefiniuj wyzwalacz)

Zapisz, jak wygląda „źle” w jednym zdaniu: „Aplikacja zawiesza się na 30–60 sekund przy zapisie dużego pliku” albo „CPU skacze do 100% co 10 minut”. Jeśli możesz odtworzyć, rób to; jeśli nie, zdefiniuj wyzwalacz (okno czasowe, obciążenie, akcja użytkownika).

2) Obserwuj (najpierw lekko)

Zanim zbierzesz ciężkie dane, potwierdź objaw i zakres:

  • jedna maszyna czy wiele?
  • jeden proces czy cały host?
  • problem wydajnościowy, crash czy hang?

Szybkie kontrole (Task Manager, Process Explorer, podstawowe liczniki) pomagają wybrać, co przechwycić dalej.

3) Zbieraj (stwórz dobry plik sprawy)

Zbieraj dowody jakbyś miał przekazać je koledze, który nie był na miejscu. Dobry plik sprawy zwykle zawiera:

  • Znaczniki czasu (start/koniec, strefa czasowa, częstotliwość)
  • Wersje (build Windows, wersja aplikacji, wersje sterowników)
  • Konfigurację (feature flags, polityki, zmienne środowiskowe, narzędzia zabezpieczeń)
  • Ślady (filtry Procmon, nazwa sesji ETW, czas trwania)
  • Zrzuty (hang/crash: full vs mini, który proces, jak został wyzwolony)

Trzymaj przechwyty krótkie i ukierunkowane. 60-sekundowy ślad obejmujący okno awarii bije 6-godzinny zapis, którego nikt nie otworzy.

4) Wyjaśnij (zamień dane w opowieść)

Przetłumacz zebrane dane na prostą narrację:

  • Co się zmieniło? (nowy build, polityka, sterownik, obciążenie)
  • Co system robi zamiast? (retry, konkurencja, zablokowane I/O, timeouty)
  • Jaka jest prawdopodobna przyczyna? (jedna lub dwie hipotezy, uporządkowane)

Jeśli nie potrafisz prosto wyjaśnić, prawdopodobnie potrzebujesz czystszego przechwycenia lub węższej hipotezy.

5) Napraw, potwierdź i zmniejsz MTTR następnym razem

Zastosuj najmniejszą bezpieczną poprawkę, a potem potwierdź ją tymi samymi krokami reprodukcji i „przed vs po” przechwyceniami.

Aby zmniejszyć MTTR, ustandaryzuj playbooki i zautomatyzuj nudne czynności:

  • jeden skrypt/polecenie do uruchamiania śladu, jeden do zatrzymania i spakowania wyników
  • spójna struktura folderów i konwencja nazewnictwa
  • lista kontrolna co zbierać dla każdego objawu (crash vs hang vs slowdown)

Nauka po incydencie: dodaj brakujący sygnał

Po rozwiązaniu zapytaj: „Jaki sygnał sprawiłby, że to byłoby oczywiste wcześniej?” Dodaj ten sygnał — zdarzenie Sysmon, provider ETW, licznik wydajności lub lekki health check — żeby następny incydent był krótszy i spokojniejszy.

Jak utrwalić praktykę: bezpieczniejsze poprawki i długoterminowa niezawodność

Sens pracy z internals nie polega na „wygranej” w debugowaniu — chodzi o przekształcenie obserwacji w zmiany, które zapobiegają powrotowi incydentu.

Przekształć ustalenia w konkretne działania

Narzędzia internals zwykle zawężają problem do małego zestawu dźwigni. Tłumacz wyniki jasno:

  • Zmiana konfiguracji: uprawnienia konta usługi, wartość w rejestrze, rozmiar puli, częstotliwość zadania
  • Patch: aktualizacja kumulatywna OS, update .NET lub hotfix dostawcy pasujący do stosu wywołań/wersji sterownika
  • Aktualizacja (lub rollback) sterownika: jeśli Procmon/ETW pokazuje zatory przy sterownikach plików/sieci/filtrach, traktuj wersje sterowników jako zależność pierwszej klasy
  • Rollback: jeśli poprawka ryzykowna, przygotuj szybki powrót (znana-dobra paczka, poprzedni GPO, starszy bundle sterowników)

Zapisz „bo dlatego”: „Zmieniliśmy X, ponieważ w Process Monitor / ETW / zrzutach zaobserwowaliśmy Y.” To zdanie zapobiega rozmyciu wiedzy.

Zabezpieczenia: okna zmian, walidacja, rollback

Dopasuj proces zmiany do potencjalnego zasięgu wpływu:

  • użyj okna zmian z mniejszym ruchem jeśli to możliwe
  • zdefiniuj kroki walidacji (jakie liczniki, ID zdarzeń lub ścieżki użytkownika muszą się poprawić)
  • przygotuj plan rollbacku z właścicielem i limitem czasowym ("Jeśli błędy nie spadną w 15 minut, cofnij")

Wzorce niezawodności stosowalne wielokrotnie

Nawet gdy przyczyna jest specyficzna, trwałość często pochodzi z powtarzalnych wzorców:

  • Timeouty by zapobiegać wyczerpaniu wątków i zablokowanym zależnościom
  • Limitowanie i backoff by zatrzymać burze retryów
  • Opcje odzyskiwania usług (restart działania, okres resetu błędów) dla przejściowych awarii
  • Health checks wykrywające zawieszenia, nie tylko crashy

Higiena danych dla przechwyceń i telemetrii

Zachowaj to, co potrzebne, i chroń to, czego nie powinieneś zbierać.

Ogranicz filtry Procmon do podejrzanych procesów, zamaskuj ścieżki/użytkowników przed udostępnieniem, ustaw retencję dla ETW/Sysmon i unikaj ciężkich przechwyceń sieciowych, jeśli nie są konieczne.

Operationalizacja playbooków (gdzie Koder.ai może pomóc)

Gdy masz powtarzalny workflow, kolejny krok to opakowanie go, żeby inni mogli go uruchamiać konsekwentnie. Tutaj platforma vibe-codingowa jak Koder.ai może być przydatna: przekształcisz checklistę incydentu w małą wewnętrzną aplikację (React UI, backend w Go z PostgreSQL), która poprowadzi reagujących przez „observe → capture → explain”, przechowa znaczniki czasu i artefakty oraz ustandaryzuje nazewnictwo i strukturę plików sprawy.

Ponieważ Koder.ai buduje aplikacje przez chat z agentową architekturą, zespoły mogą szybko iterować — dodając przycisk „start ETW session”, bibliotekę szablonów filtrów Procmon, snapshot/rollback zmian czy generator eksportowalnych runbooków — bez przebudowy całego pipeline’u deweloperskiego. Jeśli dzielisz praktyki niezawodności, Koder.ai wspiera też eksport kodu źródłowego i plany od darmowego do enterprise, więc możesz zacząć mało i skalować zarządzanie później.

Mały tygodniowy plan ćwiczeń

Raz w tygodniu wybierz jedno narzędzie i 15-minutowe ćwiczenie: prześledź wolne uruchamianie aplikacji z Procmon, przejrzyj drzewo usług w Process Explorer, sprawdź wolumen zdarzeń Sysmon albo pobierz jeden zrzut i zidentyfikuj moduł, który zawodzi. Małe powtórzenia budują pamięć mięśniową, która sprawia, że prawdziwe incydenty są szybsze — i bezpieczniejsze.

Często zadawane pytania

Dlaczego Mark Russinovich wciąż ma znaczenie dla operacji Windows dziś?

Mark Russinovich spopularyzował podejście „evidence-first” do rozwiązywania problemów w Windows i dostarczył (oraz wpłynął na powstanie) narzędzi, dzięki którym system stał się praktycznie obserwowalny.

Nawet jeśli nigdy nie czytałeś książki Windows Internals, prawdopodobnie polegasz na workflowach kształtowanych przez Sysinternals, ETW i analizę zrzutów, które skracają czas reakcji i sprawiają, że poprawki są powtarzalne.

Co oznacza „obserwowalność” w kontekście operacji Windows?

Obserwowalność to zdolność odpowiedzenia na pytanie „co się dzieje teraz?” na podstawie sygnałów systemowych.

Na Windowsie zwykle oznacza to połączenie:

  • dzienników zdarzeń dla odrębnych zdarzeń systemowych/aplikacji
  • metryk (liczniki wydajności) dla pomiaru wpływu i nasycenia
  • śledzeń (ETW) dla wysokiej jakości powodów i linii czasu
Jak wiedza o Windows internals skraca MTTR?

Znajomość wewnętrznej budowy Windows pozwala zmienić niejasne objawy w testowalne hipotezy.

Na przykład „serwer jest wolny” można zawęzić do mechanizmów: konfliktów CPU, presji stron pamięci, opóźnień I/O czy narzutu sterowników/filtrów. To przyspiesza triage i pomaga zebrać właściwe dowody, zanim problem zniknie.

Kiedy użyć Process Explorer zamiast Menedżera zadań?

Użyj Process Explorer, gdy chcesz szybko ustalić kto odpowiada za problem.

Jest przydatny do szybkich odpowiedzi, np.:

  • który proces zużywa CPU/pamięć
  • relacje rodzic-dziecko (co uruchomiło proces)
  • hotspoty na poziomie wątków i stany oczekiwania
  • jakie DLL/uchwyty proces ma otwarte
Jakie problemy najlepiej rozwiązuje Process Monitor (Procmon)?

Process Monitor sprawdza się, gdy potrzebujesz śledzenia aktywności w systemie plików, rejestrze i operacjach procesów/wątków.

Przykłady praktyczne:

  • znalezienie błędów „NAME NOT FOUND”, które uniemożliwiają uruchomienie aplikacji
  • udowodnienie, że "access denied" to kwestia uprawnień/ścieżki, a nie awarii aplikacji
  • zidentyfikowanie periodycznego «tłuczenia dysku» i dokładnej ścieżki, która jest dotykana
Jak uniknąć szumu w Procmon i nadal uzyskać użyteczne dowody?

Filtruj agresywnie i przechwytuj tylko okno, w którym występuje błąd.

Dobry workflow startowy:

  • najpierw filtruj po Process Name lub PID
  • dodaj reguły Include dla konkretnych ścieżek/kluczy, które Cię interesują
  • przechwytuj przez 30–120 sekund wokół objawu, potem zatrzymaj

Mały, analizowalny ślad jest lepszy niż ogromny, którego nikt nie otworzy.

Jak Autoruns pomaga w problemach ze startem/zgodnością i niezawodnością?

Autoruns odpowiada na pytanie „co uruchamia się automatycznie?” — usługi, zadania zaplanowane, rozszerzenia powłoki, sterowniki i więcej.

Szczególnie przydatne do:

  • wolnych rozruchów/logonów
  • przerywanych spike’ów CPU po zalogowaniu
  • tajemniczych procesów w tle

Skup się najpierw na wpisach niepodpisanych, ostatnio dodanych lub nieudanie ładujących się, i wyłączaj po jednym z notatką.

Kiedy powinienem przejść od logów/metryk do śledzenia ETW?

ETW (Event Tracing for Windows) to wbudowany rejestrator zdarzeń systemu.

Użyj ETW, gdy logi i metryki mówią, że coś jest nie tak, ale nie wyjaśniają dlaczego — np. zatory powodowane przez opóźnienia I/O, opóźnienia planowania, zachowanie sterowników czy timeouty zależności. Trzymaj przechwyty krótkie, ukierunkowane i skorelowane w czasie z raportowanym objawem.

Jak Sysmon może usprawnić śledztwa dotyczące niezawodności (nie tylko bezpieczeństwa)?

Sysmon dodaje kontekst wysokiej wartości (proces nadrzędny/dziecko, linia poleceń, skróty, hashe, ładowania sterowników), który pomaga odpowiedzieć „co się zmieniło?”

Dla niezawodności przydatne jest potwierdzenie:

  • nowych procesów pomocniczych pojawiających się przed spike’ami
  • ładowania sterowników korelującego z nowymi zawieszeniami/BSOD
  • nieoczekiwanych zmian binariów/ścieżek po aktualizacjach

Zacznij od minimalnej konfiguracji i dostosowuj include/exclude, by kontrolować objętość zdarzeń.

Jaka jest praktyczna różnica między badaniem crasha, BSOD i hangiem za pomocą WinDbg?

Zrzut pamięci często jest najcenniejszym artefaktem dla crashy i hangów — to migawka pamięci i stanu wykonania w momencie awarii.

  • crash aplikacji: zbiera się zrzuty user-mode dla pojedynczego procesu
  • BSOD: kernel dump dla całego systemu, skupiony na sterownikach i stanie jądra
  • hang: zrzut wykonany w czasie zawieszenia pozwala sprawdzić stosy wątków i przyczyny oczekiwania

WinDbg przekształca zrzut w historię: symbole, stosy i identyfikację komponentu, który zawiódł. Poprawne symbole są kluczowe.

Related posts