[macOS Sonoma]

macOS Sonoma Saga és WindowServer

2024., február 2.


Régóta nyüglődök ezzekkel a különböző pontokon megjelenő macOS röcögésekkel már a korábbi Mac-eken is. Én úgy emlékszem, hogy ezek a nyűgök nem voltak jellemzőek még az első Intel-es gépeken és az azokon futó OS X-eken.

Megpróbáltam már az összes varázslatot, amit az internet javasolt, de tényleg, hogy ki kelljen egy ilyen prémium gépen kapcsolni pár default vizuális effektet ahhoz, hogy rendesen menjen??? milyen már ez? Az is látszik, hogy ezek a várázslások nem is oldották meg véglegesen a problámákat, mert időről-időre újra megjelentek a zavaró belassulások, tehát csak ideiglenesen oldódott meg valami, ha egyáltalán…

És itt jön képbe a legutolsó móka, amikor szándékaimmal ellentétben az Apple valahogy sikeresen megfrissítette a macOS Monterey operációs rendszert Sonomára. Ezzel a frissítéssel, bár minden rendben működött alapvetően tovább a gépen, jött pár újabb kellemetlen röcögő érzés. Lehet csak a rossz érzés adódott hozzá a korábbi rözögésekhez, de valami biztosan rárakódott az biztos.

Gondolatban már azért várom, hogy milyen lehet egy M?-es gépet használni, de egyelőre nincsenek kétségeim, hogy ott is lesz majd nekem valami meglepetés.

Na de visszatérve az eredeti gondolatra, miközben a Sonoma baleseten keseregtem az Apple Support-tal együtt, közben elkezdtem figyelgetni a gép process-eit és feltűnt, hogy valaki (WindowServer process) indokolatlanul sok CPU fogyaszt.

Na erre készült el ez a kis szkript, hogy amikor kedvem van lássam, hogy rosszalkodik-e ezen a processzen keresztül valami.


#!/bin/bash

# The original idea was to somehow monitor the CPU usage of the WindowServer process because
# one of the settings (Status bar) in the iTerm application was consuming CPU resources unnoticed.
# I didn't notice that for a very long time!!! ☹️

# Prerequisites:
#  - terminal-notifier (brew install terminal-notifier)

# variables
maxcpu=30
weight=0
maxweight=5
counter=0
prevwscpu=0

# main engine
while :; do
	wscpu=$(ps -A -o %cpu,comm | grep WindowServer | awk '{print int($1)}')
	if [ $wscpu -gt $maxcpu ]; then
		((weight++))
		# echo "$weight"
		if [ $weight -gt $maxweight ]; then
			((counter++))
			# delta
			if [ $prevwscpu -gt $wscpu ]; then
				dicon='⬇'
			elif [ $prevwscpu -lt $wscpu ]; then
				dicon='⬆'
			else
				dicon='-'
			fi
			terminal-notifier \
				-group 'hu.fleischmann.macoswscpumonitor' \
				-title 'WindowServer high CPU usage!' \
				-subtitle 'Warning❗' \
				-message "CPU: $wscpu% $dicon, counter: $counter"
			#echo 'High CPU!'
			prevwscpu=$wscpu
		fi
	else
		# reset
		weight=0
		counter=0
	fi
	sleep 1
done