# 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 # /usr/lib/systemd/user/app.slice.d/10-oomd.conf. [OOM] DefaultMemoryPressureDurationSec=20s DefaultMemoryPressureLimit=50%