Studium przypadku
Studium przypadku: crash po długim czasie pracy prześledzony aż do wycieku uchwytów
Techniczne studium przypadku awarii, która występuje tylko w skali miesiąca pracy i którą dzięki uporządkowaniu punktów obserwacji i rozbudowie logów zawężono do diagnozy wycieku uchwytów.
Przegląd przypadku
Ten przypadek dotyczy aplikacji dla systemu Windows, która ulegała nagłej awarii dopiero po około miesiącu ciągłej pracy. Zaczęliśmy od uporządkowania punktów obserwacji, a ostatecznie zawęziliśmy poszukiwania do diagnozy skoncentrowanej na wycieku uchwytów. Kluczowe było to, że ustaliliśmy nie tylko samą przyczynę, lecz także to, które obserwacje należy przygotować w pierwszej kolejności.
Objawy
- Awaria nie pojawiała się w ciągu kilku dni, tylko wyłącznie po długotrwałej pracy
- Sposób, w jaki pojawiały się wyjątki, nie pozwalał łatwo ocenić, czy chodzi o wyciek
- Problem występował tylko w środowisku produkcyjnym, więc na maszynie deweloperskiej trzeba było zawęzić warunki odtworzenia błędu
Ograniczenia
- Czekanie miesiąc na każde odtworzenie błędu nie było realistyczne
- Ponieważ w grę wchodziły ponowne połączenia z kamerą i ścieżki błędów, same logi ścieżek poprawnego działania nie wystarczały
- Trzeba było móc w sposób ciągły obserwować, który zasób rośnie
Co obserwowaliśmy
- Cykliczny pomiar (heartbeat)
Handle Count,Private BytesiThread Count - Logi graniczne początku sesji, ponownego połączenia i zakończenia sesji
- Sparowane logi cyklu życia zasobów:
create/open/registerorazclose/dispose/unregister
Jak zawęziliśmy przyczynę
Nie próbowaliśmy badać „awarii po długotrwałej pracy” jako takiej. Najpierw zawęziliśmy warunki odtworzenia błędu do ścieżek błędów wokół ponownych połączeń i przekroczeń czasu (timeout). Dzięki temu mogliśmy uznać, że trafniejszą hipotezą jest wyciek uchwytów, a nie wyciek pamięci, i skupić na nim obserwację.
Jak poprawiliśmy sytuację
- Dodaliśmy monitorowane wskaźniki, aby można było śledzić trend wzrostu, a nie tylko moment awarii
- Uporządkowaliśmy logi graniczne, aby łatwiej było prześledzić, który komponent otworzył zasób, a który go zamknął
- Uporządkowaliśmy wyniki diagnozy tak, aby łatwo było powiązać je z późniejszą infrastrukturą testów ścieżek błędów
Usługi powiązane z tym przypadkiem
Ten przypadek łączy się zarówno z usługą Diagnostyka błędów i analiza przyczyn źródłowych, która pozwala wyizolować awarie występujące dopiero po długotrwałej pracy, jak i z usługą Tworzenie aplikacji dla systemu Windows, w ramach której od strony implementacji porządkujemy logowanie, ponowne łączenie i obserwację w trakcie eksploatacji.
Zapraszamy do konsultacji
Jeśli mają Państwo problem zbliżony do treści tej strony, prosimy o konsultację z nami, przekazując obecny kontekst oraz rodzaj potrzebnego wsparcia.