Systemd resource limiting
Systemd nabizi monzosti jak limitovat maximalni mnozstvi alokovane pameti (a ne jen ji). Lze to konfigurovat bud ad-hoc z prikazove radky, nebo perzistentne prez systemd servisy a jejich definice.
Jak to funguje
Nejprve je nutne zapnout Accounting pro jednotlive typy zdroju. To lze udelat bud globalne napriklad v /etc/systemd/system.conf, nebo lokalne pro urcite servisy.
Priklad zapnuti accountingu pro jednotlive sluzby tedy muze vypadat napriklad takto:
[Service]
# Sledovani CPU
CPUAccounting=true
# Sledovani vyuziti Pameti
MemoryAccounting=true
# Sledovani IO operaci
IOAccounting=true
# Nastaveni hranice, kde se zacne pamet procesu celkem dost agresivne odebirat
MemoryHigh=2G
# Nad tuto hranici se proces nedostane i za cenu zabiti
MemoryMax=4G
Po zapnuti accountingu je mozne vse sledovat pomoci systemd nastroje systemd-cgtop, ktery v realnem case ukazuje vyuziti zdroju jednotlivymi procesy a to v procesovem strome. Nastroj je celkem jednoduchy, ale pouziva klavesove zkratky, takze napriklad pro razeni dle vyuzite pameti slouzi klavesa M. Pokud nas zajima razeni pameti od spusteni nastroje, lze pouzit rovnou prikaz s parametrem -m
Ad-Hoc prikazy
Pro praci se zdroji v realnem case je tu i moznost nastavovat zdroje instantne pomoci systemctl. Nize je nekolik uzitecnych prikazu…
# nastavim zdroje jen do dalsiho restartu
# odebranim parametru --runtime je pak zmena perzistentni
systemctl set-property --runtime cron.service MemoryMax=4G
# zobrazeni vypisu procesu razenych dle vyuziti pameti
systemd-cgtop -m
Control Group Tasks %CPU Memory Input/s Output/s
----------------------------------------------------------------------------
/ 2764 277.1 32.2G - -
/system.slice 2547 251.7 28.3G - -
/system.slice/cron.service 10 100.0 12.9G - -
/system.slice/mysql.service 344 80.1 8.4G - -
/user.slice 34 1.3 3.6G - -
/user.slice/user-0.slice 27 - 2.1G - -
Pekne, podrobnejsi pojednani na toto tema je napriklad zde https://documentation.suse.com/de-de/sled/15-SP3/html/SLED-all/cha-tuning-cgroups.html