Sonntag, 23. Januar 2022
Gestern Samstag-Abend: Vor dem-zu-Bett-gehen starte ich die Aktualisierung meines iMac 27 Zoll (iMac 17,1), Late 2015, Quad-Core i7, 24 GB, 2 TB von macOS Big Sur 11.6.1 auf 11.6.2. Ich habe das Gerät im Oktober 2017 für 1950 CHF gebraucht gekauft; da ist das Gerät gerade sieben Monate alt. Schnäppchen!
Heute Morgen ist das elektronische Postfach voll mit in Episoden an- und abklingenden monit-Meldungen. Als ich mich am Vormittag hinter das Gerät setze, ist schnell klar, dass etwas ganz und gar nicht stimmt. Es folgt ein Debug-Marathon, ursprünglich davon ausgehend, dass ich es mit einem Software-Problem zu tun habe. Im Laufe des Tages folgt das (widerwillige) Upgrade auf macOS Monterey, bis ich schlussendlich der Ursache des Ausfalls auf die Schliche komme:
Der im Innern des iMacs installierte Lüfter muss während — oder kurz nach — dem Betriebssystem-Upgrade kaputt gegangen sein.
Die Symptome:
- Der Prozess kernel_task beansprucht knapp 500 Prozent der CPU-Leistung (siehe Link weiter unten)
- In der Prozessliste findet man dutzende mds_stores Prozesse
- Die Kiste läuft, plötzlich wird der integrierte sowie der angeschlossene Dell P2415Q-Bildschirm schwarz — und plötzlich startet der iMac ohne zu tun neu
- Der per DisplayPort angeschlossene Dell P2415Q verliert andauernd das Signal
- Jede Aktion im GUI dauert extrem lange — es fühlt sich an, als würde man einen 286er bedienen. Doppelklick, eine Minute warten. Alt-Tab, Sekunden vergehen bis die gewählte Applikation in den Vordergrund tritt
- Die Eingabe über die Tastatur hakelt extrem — zwischen Tastendruck und Anzeige auf dem Bildschirm können Sekunden vergehen
- Die Situation verbessert sich spürbar, wenn man das Kabel des externen Monitors abhängt
- htop weist eine Load Average nördlich von 15 aus
- Im /var/log/system.log (per SSH eingeloggt kann man das Gerät debuggen, ohne mit dem GUI kämpfen zu müssen) liest man verschiedene komische Meldungen …
- … der Service mds (Spotlight-Indexierung) muss andauernd Indexierungsprozesse abschiessen. Auch das Deaktivieren von Spotlight mittels sudo mdutil -a -i off (Quelle) bringt nichts
- … Apps finden Grafikkartentreiber nicht (nicht sicher, ob das wirklich ein echtes Problem ist): VTDecoderXPCService[558]: getattrlist failed for /Library/GPUBundles/AMDRadeonVADriver.bundle/Contents/MacOS/AMDRadeonVADriver: #2: No such file or directory und Dock[1242]: getattrlist failed for /Library/GPUBundles/AppleIntelSKLGraphicsVADriver.bundle/Contents/MacOS/AppleIntelSKLGraphicsVADriver: #2: No such file or directory
- … immer wieder erscheinen com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.user.89): entering bootstrap mode und com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.user.89): exiting bootstrap mode
- Die Ping-Latenz fluktuiert spürbar in einer Art Wellenform; von den erwarteten einstelligen Millisekunden bis zu dreistelligen Werten (siehe Anhang)
Obwohl sich dieser Stackexchange-Artikel und dieser offizielle Apple-Artikel auf (überhitzende) MacBook Pros bezieht, gibt er mir den wichtigsten Tipp: Hitze!
Und tatsächlich, das Gehäuse ist heiss. Und plötzlich erinnere ich mich, dass ich den Lüfter des iMacs verdächtig lange nicht (mehr) gehört habe. Normalerweise lief der täglich mehrmals an, insbesondere, wenn zwei Mal täglich Backups (rsync auf das Synology NAS, TimeMachine auf die TimeCapsule sowie mit Arq zu Backblaze) durchgeführt wurden.
Ich installiere mir die Software Macs Fan Control, welche den Verdacht bestätigt: Die aktuelle Umdrehungszahl beträgt (orange eingefärbt) 0. Minimal müssten eigentlich 1200 Umdrehungen gefahren werde. Ich schalte auf Full Blast (2850 Umdrehungen) — doch kein Wank, kein Geräusch, keine Zirkulation. Währenddessen sehe ich, dass die CPU-Temperatur bei 87 Grad angekommen ist.
Nachtrag: Das geht übrigens alles auch von der Kommandozeile, ohne Installation von Drittsoftware. Um die Temperaturen der CPU-Kerne auszulesen:
# powermetrics --samplers smc | grep -i "CPU die temperature"
CPU die temperature: 47.70 C
CPU die temperature: 46.17 C
CPU die temperature: 46.41 C
CPU die temperature: 46.48 C
CPU die temperature: 46.30 C
...
Um die Lüftergeschwindigkeit auszulesen:
# powermetrics --samplers smc | grep Fan
Fan: 0 rpm
Fan: 0 rpm
...
Und plötzlich macht alles Sinn: Die CPU droht zu überhitzen, weil sie der iMac mangels funktionierendem Lüfter nicht mehr kühlen kann. Deshalb schreitet nun kernel_task zur Tat: Er drosselt alle laufenden Prozesse, damit diese die CPU nicht weiter strapazieren. Für den Benutzer bedeutet das ein extrem träges System. Indem ich den externen Monitor abgehängt habe, läuft die GPU nicht mehr (so) heiss, was ebenfalls Linderung in der „finnischen Sauna“ im Innern des iMac bringt.
Rückblickend ein Wunder, dass ich Monterey während Stunden (!) tatsächlich installieren konnte und die Kiste dabei nicht gegrillt habe (geschweige denn einen Wohnungsbrand ausgelöst habe).
Ich trenne den iMac vom Strom, um den System Management Controller (SMC) zurückzusetzen (Quelle). Leider springt der Lüfter auch danach nicht mehr an. Damit sind alle Lösungsversuche, die auch unter folgender Frage beschrieben wurden, ausgeschöpft: iMac fans stopped, what must I do?
Die leider letzte verbleibende Lösung? Den defekten Lüfter austauschen — hilfreich könnte diese iFixIt-Anleitung sein. Ich habe aber keine Lust, an meinem iMac rumzumechen.
Nun habe ich mir als Ersatz einen Mac mini M1 bestellt.
Sobald das Ersatzgerät da ist, werde ich abklären, wie viel mich bei DataQuest DQ Solutions in Bern ein Austausch des Lüfters kosten wird (ich befürchte mehrere hundert Franken, da der ganze Mac auseinandergebaut und ein Ersatzlüfter eingebaut werden muss).
Dann werde ich mir überlegen müssen, ob ich das Gerät repariere, und falls ja, ob ich es danach wieder in Betrieb nehme, oder es auf Ricardo verkaufe. Vermutlich Letzteres: Die Zukunft gehört M1, und wahrscheinlich wäre das der richtige Zeitpunkt, auch auf dem Desktop den Wechsel zu vollziehen (diesen Text schreibe ich auf einem MacBook Air M1).
Anhang
64 bytes from 1.2.3.4: icmp_seq=11856 ttl=64 time=5.659 ms
64 bytes from 1.2.3.4: icmp_seq=11857 ttl=64 time=5.565 ms
64 bytes from 1.2.3.4: icmp_seq=11858 ttl=64 time=8.133 ms
64 bytes from 1.2.3.4: icmp_seq=11859 ttl=64 time=6.890 ms
64 bytes from 1.2.3.4: icmp_seq=11860 ttl=64 time=6.753 ms
64 bytes from 1.2.3.4: icmp_seq=11861 ttl=64 time=14.673 ms
64 bytes from 1.2.3.4: icmp_seq=11862 ttl=64 time=52.217 ms
64 bytes from 1.2.3.4: icmp_seq=11863 ttl=64 time=101.217 ms
64 bytes from 1.2.3.4: icmp_seq=11864 ttl=64 time=153.161 ms
64 bytes from 1.2.3.4: icmp_seq=11865 ttl=64 time=11.308 ms
64 bytes from 1.2.3.4: icmp_seq=11866 ttl=64 time=6.809 ms
64 bytes from 1.2.3.4: icmp_seq=11867 ttl=64 time=9.474 ms
64 bytes from 1.2.3.4: icmp_seq=11868 ttl=64 time=5.172 ms
64 bytes from 1.2.3.4: icmp_seq=11869 ttl=64 time=6.211 ms
64 bytes from 1.2.3.4: icmp_seq=11870 ttl=64 time=7.839 ms
64 bytes from 1.2.3.4: icmp_seq=11871 ttl=64 time=5.575 ms
64 bytes from 1.2.3.4: icmp_seq=11872 ttl=64 time=5.559 ms
64 bytes from 1.2.3.4: icmp_seq=11873 ttl=64 time=20.077 ms
64 bytes from 1.2.3.4: icmp_seq=11874 ttl=64 time=60.732 ms
64 bytes from 1.2.3.4: icmp_seq=11875 ttl=64 time=107.225 ms
64 bytes from 1.2.3.4: icmp_seq=11876 ttl=64 time=159.577 ms
64 bytes from 1.2.3.4: icmp_seq=11877 ttl=64 time=6.760 ms
64 bytes from 1.2.3.4: icmp_seq=11878 ttl=64 time=13.282 ms
64 bytes from 1.2.3.4: icmp_seq=11879 ttl=64 time=15.027 ms
64 bytes from 1.2.3.4: icmp_seq=11880 ttl=64 time=6.770 ms
64 bytes from 1.2.3.4: icmp_seq=11881 ttl=64 time=4.986 ms
64 bytes from 1.2.3.4: icmp_seq=11882 ttl=64 time=5.948 ms
64 bytes from 1.2.3.4: icmp_seq=11883 ttl=64 time=8.361 ms
64 bytes from 1.2.3.4: icmp_seq=11884 ttl=64 time=5.632 ms
64 bytes from 1.2.3.4: icmp_seq=11885 ttl=64 time=21.801 ms
64 bytes from 1.2.3.4: icmp_seq=11886 ttl=64 time=66.570 ms
64 bytes from 1.2.3.4: icmp_seq=11887 ttl=64 time=109.075 ms
64 bytes from 1.2.3.4: icmp_seq=11888 ttl=64 time=153.075 ms
64 bytes from 1.2.3.4: icmp_seq=11889 ttl=64 time=10.720 ms
64 bytes from 1.2.3.4: icmp_seq=11890 ttl=64 time=8.682 ms