22 lines
1.2 KiB
Plaintext
22 lines
1.2 KiB
Plaintext
# Without an OOM daemon there is nothing between "memory is tight" and
|
|
# "processes start dying at random". The kernel OOM killer only fires once an
|
|
# allocation has already failed outright, which is far too late for the
|
|
# desktop: the machine thrashes in reclaim until something fails somewhere
|
|
# fatal. Seen in practice as Hyprland taking SIGBUS mid-memcpy from a Wayland
|
|
# client's shm pool, because the client was being torn down by the same memory
|
|
# pressure. One app misbehaving should not cost the whole session.
|
|
#
|
|
# systemd-oomd keys on PSI stall time rather than on free pages, so it acts
|
|
# while the machine is still thrashing instead of after an allocation failed.
|
|
# Deliberately not earlyoom: that fires only when free RAM *and* free swap are
|
|
# both under threshold, so a large, mostly-unused swapfile keeps it asleep
|
|
# through exactly this failure.
|
|
#
|
|
# 50% means half of a ten-second window was spent stalled on memory reclaim.
|
|
# Held for 20s straight, the desktop is already unusable and losing one app is
|
|
# the cheaper outcome. Which cgroups are eligible is set separately, in
|
|
# ~/.config/systemd/user/app.slice.d/10-oomd.conf.
|
|
[OOM]
|
|
DefaultMemoryPressureDurationSec=20s
|
|
DefaultMemoryPressureLimit=50%
|