>>Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGKILL) завершит работу процесса, наиболее активно потребляющего память
> Ох неужели наконец-то кто-то это сделал, ПРАЗДНИК блин.
> Постоянно виснет система из-за того что кончается свободная оперативка, а свап на
> ССД включать не хочу ибо дорогой ССД быстро убъётся постоянными перезаписями. У нас, свободных бздунов, это делается так (для некоторых, особо одаренных знатоков и петросянов опеннета: естественно, только через пуссиэкзе и все такое, никак иначе! Ну, вы поняли…)
man protect
NAME
protect – protect processes from being killed when swap space is
exhaustedEXAMPLES
Mark the Xorg server as protected:
pgrep Xorg | xargs protect -p
% more /etc/sysctl.conf
vm.disable_swapspace_pageouts=1
vm.pageout_oom_seq=2
kern.sched.preempt_thresh=224
kern.sched.interact=10# что значит
% sysctl -d vm.pageout_oom_seq vm.disable_swapspace_pageouts kern.sched.preempt_thresh kern.sched.interact
vm.pageout_oom_seq: back-to-back calls to oom detector to start OOM
vm.disable_swapspace_pageouts: Disallow swapout of dirty pages
kern.sched.preempt_thresh: Maximal (lowest) priority for preemption
kern.sched.interact: Interactivity score threshold
% config -x /boot/kernel/kernel|grep SWAP
options NO_SWAPPING
В итоге, даже при сильном "перегрузе" всех ядер гуй остается приятно отзывчивым, а если что-то начинает отжирать память "как не в себя", то фриз до прихода ООМ убивца можно даже не заметить (опция, ускоряющая каст ООМ killer:
vm.pageout_oom_seq=2, вместо =10)
Заценка:
/usr/bin/time -l python -c '{x:str(x)*(x**x**x) for x in range(100000000)}'
time: command terminated abnormally
15,35 real 1,66 user 3,86 sys
5047412 maximum resident set size
3 average shared memory size
11 average unshared data size
119 average unshared stack size
1259462 page reclaims
12 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
0 signals received
25 voluntary context switches
700 involuntary context switches
zsh: killed /usr/bin/time -l python -c '{x:str(x)*(x**x**x) for x in range(100000000)}'
Если что - лицензия позволяет утянуть^W позаимств^W вдохновиться, нам не жалко ;)