Jak powstrzymać mDNSResponder przed używaniem 90-100% CPU bez przerwy na zawsze na Catalinie?

Właśnie zaktualizowałem mojego 2018 15-calowego MacBooka Pro z Mojave do Cataliny (10.15.4). Minęło już kilka godzin.

Jedną z pierwszych rzeczy, które zrobiłem po aktualizacji, była edycja wideo przy użyciu nowej bezpłatnej wersji próbnej Final Cut Pro X. Wentylatory chłodzące mojego laptopa działały na pełnych obrotach przez cały czas, ale zawsze trwało renderowanie w tle, więc uznałem, że to normalne.

Kiedy skończyłem i wyszedłem z FCP, wentylatory się nie obracały, więc sprawdziłem Monitor Aktywności i odkryłem, że mDNSResponder zajmuje 90-100% CPU w sposób ciągły. Kolumna Threads w Monitorze Aktywności wskazuje 3-4 wątki przez większość czasu; 100% jest rozłożone na wszystkie z nich, i nie wszystkie są na tym samym rdzeniu. Nie jestem pewien, jak to się dzieje, że udaje się to zrobić i nadal siedzieć na poziomie lub poniżej 100% przez większość czasu, ale to właśnie robi.

zrzut ekranu z Monitora Aktywności

Laptop ma sześć rdzeni (12 logicznych), więc jeden rdzeń w pełni zajęty nie robi zauważalnej różnicy w wydajności (chyba że zacznę mierzyć, ile czasu zajmują rzeczy — ale to jest zauważenie, że liczby są inne – nie, że wydajność jest inna!).

Uwaga: W agregacji, wykresy słupkowe pokazują więcej niż jeden pełny rdzeń jest wykorzystywany. Jest to oczekiwane. Na moim zrzucie ekranu z Monitora Aktywności mam zastosowane wyszukiwanie i dzieje się wiele innych rzeczy — Slack jest otwarty, Chrome z jedenastoma miliardami kart, IntelliJ IDEA prawdopodobnie coś indeksuje, i tak dalej.

Próbowałem zrestartować mDNSResponder za pomocą tych poleceń:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plistsudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Widziałem, jak proces znika, więc wiem, że polecenie zadziałało, ale natychmiast powrócił do 100% użycia procesora, gdy uruchomiłem go z powrotem. mDNSResponderHelper nie zatrzymał się, więc spróbowałem ponownie, wstawiając sudo killall mDNSResponderHelper jako krok pośredni. To sprawiło, że oba procesy odeszły zgodnie z moimi intencjami, ale nadal nie rozwiązało problemu.

Próbowałem również wysłać sygnał HUP do mDNSResponder w następujący sposób:

sudo killall -HUP mDNSResponder

To również nie przyniosło żadnego efektu.

Otworzyłem Console, wpisałem mdnsresponder w polu wyszukiwania i obserwowałem, jak wiadomości przepływają przez minutę lub dwie. Kilka rzeczy o Bonjour, mnóstwo <private>, i kilka całkiem normalnie wyglądających logów zapytań DNS. Próbowałem wyłączyć zarówno Bluetooth jak i Wifi w nadziei, że wpłynie to na Bonjour, ale jestem na przewodowym połączeniu Ethernet (którego nie odłączyłem) i nie wydawało się to mieć żadnego efektu.

Po napisaniu tego, w końcu zauważyłem, że cloudphotosd również zajmował zdrowy kawałek CPU. Założyłem, że jest to notoryczny proces reindeksowania, który często ma miejsce po aktualizacji systemu operacyjnego, przechodząc przez moją (dość dużą) bibliotekę zdjęć, aktualizując metadane w oparciu o nowe funkcje Cataliny i przesyłając te zmiany do iCloud. To by wyjaśniało pewną stałą aktywność sieciową, więc pomyślałem, że może to by wyjaśniało aktywność mDNSRespondera. Więc zostawiłem to okno otwarte bez wysyłania i poczekałem chwilę, aby zobaczyć czy cloudphotosd się uspokoi. Tak się stało, ale mDNSResponder nie. To tyle, jeśli chodzi o to przeczucie!

W końcu spróbowałem zrestartować komputer Mac; mDNSResponder nie tracił czasu na powrót do pracy. Po ponownym uruchomieniu komputera nie działały żadne aplikacje, a mDNSResponder stale pracował na poziomie 100% lub niższym, tak jak wcześniej.

To jest strona z pytaniami, a ja nie zadałem żadnego pytania, więc zaczynam: jak się dowiedzieć, co to robi, i jak sprawić, żeby przestało?

AKTUALIZACJA: Minęło prawie 48 godzin, a mDNSResponder nadal pracuje. Mój czas pracy na baterii jest teraz do bani. Zauważyłem, że zamknięcie pokrywy laptopa wydaje się powodować zatrzymanie, ale powraca, gdy ją ponownie otworzę. Zauważyłem też dodatkowy symptom: pierwsze wyszukiwanie DNS po restarcie trwa ~2 sekundy (spodziewałbym się <200ms). Nie jestem pewien, czy to po prostu efekt uboczny tego, że mDNSResponder jest tak zajęty robieniem tego, co robi, czy też jest to związane z przyczyną.

UPDATE 2: minęły ponad trzy tygodnie. Dodałem 100-rep bounty. Opóźnienie DNS lookup wzrosło; często trwa 20-30 sekund, i chociaż wydaje się, że istnieje pewne buforowanie, myślę, że ma ono czasowe wygaśnięcie, ponieważ opóźnienie pojawia się później bez restartu. Chętnie nawiążę bezpośrednią interakcję z kimś, kto ma wystarczającą wiedzę, aby rozwiązać i zdiagnozować ten problem. Jestem na Eastern Daylight Time w Stanach Zjednoczonych (UTC-4) i ogólnie dostępny w godzinach pracy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.