Udostępnij za pośrednictwem


Przewodnik scenariusza: Rozwiązywanie problemów z wydajnością usługi WMI

W tym artykule opisano różne sposoby badania przecieków pamięci lub przecieków obsługi w celu rozwiązania problemów z wydajnością instrumentacji zarządzania Windows (WMI) oraz sposobu zbierania dodatkowych informacji.

Mogą wystąpić następujące scenariusze lub problemy:

  • Maszyna działa powoli.
  • Uruchamianie poleceń, takich jak tasklist lub otwieranie msinfo32.exe lub compmgmt.msc , zajmuje dużo czasu, aby odpowiedzieć lub nie wyświetla odpowiednich wyników.
  • Aplikacje lub klienci w zależności od usługi WMI mają problemy z pobieraniem lub wyświetlaniem informacji albo w końcu kończą się niepowodzeniem.
  • Zapytania usługi WMI kończą się niepowodzeniem z błędami, takimi jak WBEM_E_INVALID_CLASS lub WBEM_E_NOT_FOUND.
  • Usługa WMI (Winmgmt) nie odpowiada.
  • Łączna pamięć maszyny osiągnie 100%.

Zauważysz również, że svchost.exe (hostowanie usługi Winmgmt) lub jeden z procesów WmiPrvse.exe zużywa dużą ilość pamięci lub ma wysoką liczbę dojść w Menedżerze zadań w danym momencie. Jeśli maszyna lub usługa Winmgmt zostanie uruchomiona ponownie lub problematyczny proces WmiPrvse.exe zostanie zakończony ręcznie, sytuacja z wysoką ilością pamięci zostanie tymczasowo złagodzony. Jednak problem powtarza się po pewnym czasie.

Możliwe przyczyny przecieku pamięci lub przecieku dojść

Jeśli usługa WMI lub WmiPrvse.exe proces zużywa pamięć lub uchwyty i nie zmniejsza ani nie zwalnia dojść z upływem czasu, jest uważany za przeciek pamięci lub przeciek dojścia odpowiednio.

Przyczyna wycieku różni się w zależności od scenariuszy, ale jest to zwykle spowodowane przez:

  • Problematyczne, nieefektywne lub ogromne zapytania WMI wykonywane przez aplikację lub usługę.
  • Wysoka częstotliwość zapytań.
  • Interferencja produktów innych niż microsoft.
  • Obiekt skojarzony z badaną klasą WMI.

Chociaż badanie przecieków pamięci lub obsługi wymaga dogłębnej analizy zapytań i zrzutów debugowania usługi WMI lub procesu WmiPrvse.exe , początkowe kroki rozwiązywania problemów mogą pomóc w zawężeniu lub rozwiązaniu problemu.

Oto cykl życia wykonywania zapytania WMI:

  1. Klient przesyła zapytanie.
  2. Usługa WMI przechowuje zapytanie jako zadanie w pamięci o nazwie "pamięć buforu arbitratora".
  3. Usługa WMI wywołuje odpowiedniego dostawcę usługi WMI w celu wykonania zapytania.
  4. Dostawca WMI zwraca wyniki zapytania do usługi WMI i przechowuje wyniki w buforze arbitra.
  5. Klient pobiera wyniki zapytania.
  6. Zapytanie i wyniki są cofane z buforu arbitra.

Jeśli wystąpi przeciek pamięci usługi WMI lub dojścia, bufor arbitratora może być wypełniony zbyt wieloma zadaniami lub wynikami zapytania, nie pozostawiając więcej miejsca dla innych zapytań.

  • Jeśli używasz systemu operacyjnego starszej niż Windows Server 2016, usługa WMI działa w ramach udostępnionego kontenera svchost.exe wraz z innymi usługami.
  • Jeśli kontener svchost.exe przecieka pamięć lub uchwyty, należy najpierw ustalić, czy wyciek jest spowodowany przez usługę WMI lub inne usługi w kontenerze svchost.exe.

Aby to ustalić, wykonaj następujące kroki:

  1. Izoluj usługę WMI do własnego kontenera svchost.exe za SC Config WINMGMT Type= Own pomocą polecenia .
  2. Uruchom ponownie usługę Winmgmt.
  3. Polecenie tasklist /svc wyświetli listę wszystkich uruchomionych procesów i usług hostowanych w każdym kontenerze svchost.exe . Jeśli polecenie działa poprawnie, powinna zostać wyświetlona usługa Winmgmt uruchomiona w oddzielnym izolowanym kontenerze svchost.exe .
  4. Kontynuuj monitorowanie pamięci lub obsługi użycia. Jeśli nadal rośnie wraz z upływem czasu i w ogóle nie spada, oznacza to, że usługa Winmgmt jest jednym przeciekającą pamięcią lub uchwytem. Jeśli nie, może zostać wyświetlony inny kontener svchost.exe hostowania innej pamięci lub dojść wycieku usługi.
  5. Aby przywrócić zmiany, uruchom SC Config WINMGMT Type= Share polecenie .

Wyciek jest zwykle spowodowany problematycznym zachowaniem klienta lub problemem z łącznością, który uniemożliwia prawidłowe wydawanie obiektów zadań związanych z zapytaniami.

Aby ustalić, czy występuje problem z klientem, musisz zrozumieć wzorzec przecieku i przejrzeć Menedżera zadań, aby sprawdzić, czy pamięć wzrasta w określonym czasie, czy podczas konkretnej akcji dowolnej aplikacji. Na przykład użycie pamięci usługi WMI zwiększa się za każdym razem, gdy są instalowane aktualizacje systemu Windows.

Aby monitorować użycie pamięci lub liczbę dojść do dowolnego procesu (usługa WMI lub proces WmiPrvse.exe) przy użyciu monitor wydajności (Perfmon), wykonaj następujące kroki:

  1. Zanotuj identyfikator procesu (PID) svchost.exe zawierający usługę Winmgmt lub WmiPrvse.exe proces, który przecieka pamięć lub uchwyty.

  2. Wprowadź wartość Perfmon w oknie Uruchamianie, aby otworzyć monitor wydajności.

  3. Wybierz monitor wydajności w okienku po lewej stronie, a następnie wybierz znak plus (+) w okienku po prawej stronie, aby otworzyć okno Dodawanie liczników.

  4. Rozwiń węzeł Proces i wybierz pozycję Proces identyfikatora. Wybierz wszystkie wystąpienia WmiPrvse# i svchost#, a następnie wybierz pozycję Dodaj>OK.

    Zrzut ekranu przedstawiający wybrane wszystkie wystąpienia WmiPrvse# i wystąpienia svchost#.

  5. Dla każdego elementu na liście zobaczysz, że last, Average i Minimum mają taką samą wartość, która jest identyfikatorem PID tego procesu.

    Zrzut ekranu przedstawiający, że element o tej samej wartości Last,Average i Minimum jest identyfikatorem PID procesu.

  6. Przejrzyj wszystkie elementy na liście i znajdź identyfikator PID usługi Winmgmt lub WmiPrvse.exe procesu, który przecieka pamięć lub uchwyty. Następnie zanotuj dokładne wystąpienie svchost# lub WmiPrvse# .

  7. Usuń wszystkie elementy z listy.

  8. Ponownie wybierz pozycję Dodaj liczniki, a następnie w obszarze Proces wybierz pozycję Liczba dojść, Bajty prywatne, Liczba wątków i Zestaw roboczy.

  9. Wybierz poprawne wystąpienie svchost# lub WmiPrvse# , a następnie wybierz pozycję Dodaj. Spowoduje to wyświetlenie graficznej reprezentacji zasobów używanych przez wybrane procesy.

    Zrzut ekranu przedstawiający okno Dodawanie liczników z wybranym wystąpieniem WmiPrvse#.

  10. Należy stwierdzić, czy liczba pamięci lub dojść zwiększa się w określonych interwałach czasu lub o określonych porach dnia lub z dowolną akcją. Gdy zrozumiesz wzorzec przecieku, przeanalizuj przychodzące zapytania w czasie wzrostu pamięci lub dojść.

  11. Poszukaj zapytań, które są ogromne, częste lub pozostają zbyt długo w zadaniu.

    Uwaga

    Przeglądanie zapytań przychodzących polega na określeniu co najmniej jednego procesu klienta, który może potencjalnie wykonywać problematyczne zapytania lub zachowywać się nieprawidłowo.

  12. Po utworzeniu podejrzanego klienta możesz go przetestować, tymczasowo odinstalowując lub wyłączając go, a następnie ponownie uruchamiając usługę WMI.

Jeśli nie wystąpi wyciek pamięci, zidentyfikowany proces klienta jest przyczyną problemu.

Zdumione repozytorium

Przejrzyj rozmiar repozytorium WMI przechowywanego w folderze C:\Windows\System32\wbem\Repository. Opis lub określenie rozmiaru repozytorium:

  • Rozmiar repozytorium zależy od wielu czynników, takich jak zasoby i obciążenie maszyny, aktywnych usług i aplikacji zainstalowanych na maszynie oraz środowiska (na przykład niezależnie od tego, czy należy do klastra, czy serwera SQL).
  • W przypadku systemu operacyjnego serwera rozmiar repozytorium w dobrej kondycji może wynosić od kilkuset MB do 1,5 GB. W przypadku systemu operacyjnego klienta rozmiar może wynosić kilkaset MB. Repozytorium nie musi pozostawać w określonym rozmiarze i nie ma żadnego zapisanego limitu.
  • Ogromny rozmiar (ponad 1 GB) jest zwykle uważany za podejrzany tylko wtedy, gdy na maszynie występują problemy lub objawy opisane na początku tego artykułu.
  • Rozmiar repozytorium jest wyjątkowo duży lub rośnie wraz z upływem czasu. W takim przypadku repozytorium jest prawdopodobnie wdęczone.

Wzdęto repozytorium musi zostać zbadane przy użyciu wyspecjalizowanych narzędzi, aby określić jego dokładną przyczynę. Możesz otworzyć zgłoszenie do pomocy technicznej firmy Microsoft z przechwyconymi danymi.

Jednak w większości przypadków wdęczone repozytorium WMI jest spowodowane przez wynikowy zestaw zasad (RSoP) rejestrowania lub monitorowania aplikacji, takich jak Microsoft System Center Configuration Manager (SCCM).

W przypadku problemów z rejestrowaniem RSoP zobacz Nieoczekiwanie powolne logowanie spowodowane dużym repozytorium WMI w systemie Windows lub Windows Server.

Nawet po zastosowaniu rozwiązania repozytorium WMI musi zostać zresetowane, aby zmniejszyć jego rozmiar. Nie zalecamy resetowania repozytorium WMI bez wcześniejszych wskazówek od specjalistów pomocy technicznej firmy Microsoft.

Jeśli powyższe kroki nie mogą rozwiązać problemu, musisz zebrać ślady i zrzuty i wysłać je do specjalistów pomocy technicznej firmy Microsoft w celu dokładniejszego zbadania, jak wspomniano w sekcji Zbieranie danych.

Proces WmiPrvse.exe przecieka dojścia lub pamięci

Jeśli proces WmiPrvse.exe przecieka dojścia lub pamięci, prawdopodobnie jest to jeden z następujących przypadków:

  • Aplikacja kliencka wykonuje nietypowe, nieefektywne lub duże zapytania.
  • Proces WmiPrvse.exe nie zwalnia zasobów zgodnie z oczekiwaniami podczas przetwarzania zapytania usługi WMI, co prowadzi do przecieku pamięci i zatrzymuje proces WmiPrvse.exe.
  • Skala maszyny lub konfiguracji środowiska jest duża.

W takich przypadkach zobacz "Przewodnik scenariuszy: Rozwiązywanie problemów z przekroczeniem limitu przydziału WmiPrvse.exe problemów lub scenariuszy".

Zbieranie danych

Aby otworzyć zgłoszenie do pomocy technicznej w celu dalszego zbadania, możesz zebrać informacje, wykonując kroki opisane w temacie Zbieranie informacji przy użyciu przewodnika rozwiązywania problemów z środowiskiem użytkownika lub przy użyciu narzędzia WMI-Collect na komputerze, na którym ostatnio wystąpił problem. Oto konkretne kroki:

  1. Pobierz WMI-Collect.zip i wyodrębnij go do folderu, takiego jak C:\temp.

  2. W wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień uruchom skrypt WMI-Collect.ps1 z folderu, w którym jest zapisywany skrypt. Na przykład:

    C:\temp\WMI-Collect.ps1 -Logs
    
  3. Pozostaw otwarty wiersz polecenia programu PowerShell za pomocą komunikatu "Naciśnij ENTER, aby zatrzymać przechwytywanie:".

  4. Skrypt tworzy podfolder zawierający wyniki wszystkich śladów i informacji diagnostycznych. Kompresuj folder. Po utworzeniu zgłoszenia do pomocy technicznej ten plik można przekazać do bezpiecznego obszaru roboczego na potrzeby analizy.