LINUX.ORG.RU

Как настроить systemd-oomd на убийство firefox ?

 , ,


0

1

Хочется, чтобы вместо зависания умирал firefox, а заметки можно было сохранить.

Systemd-oomd опрашивает systemd на наличие контрольных групп с поддержкой OOMD … Cgroups должен будет использовать EnableOomdKill, если они хотят быть убитыми

Это как?

Поведение systemd-oomd контролируется с помощью нового файла конфигурации oomd.conf

Топики на LOR:

Страницы в интернете:

★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 10)

Опять самокат бетонные плиты катать хочет?

Radjah ★★★★★
()
Ответ на: комментарий от curufinwe

В статье 2015-го года пример команды в комментариях:

systemd-run --user --slice=user-firefox --unit=user-firefox -p MemoryHigh=512M -p CPUQuota=25% firefox

--user
Talk to the service manager of the calling user, rather than the service manager of the system.

Но я так и не понял, что записывать в какие конфигурационные файлы, чтобы оно так работало само после перезагрузки. Подозреваю, что надо делать user-patches к ebuild для firefox, чтобы внести эту команду в .desktop-файл для firefox.

А хотелось бы не так, хотелось бы как-то настраивать systemd.

Einstok_Fair ★★☆
() автор топика

Как настроить systemd-oomd на убийство firefox

systemd-oomd еще не вполне существует, возможно появится в systemd 247.

Рекомендую использовать earlyoom или nohang - c их помощью можно повысить приоритет firefox или Web Content (дочерние процессы firefox, отвечающие за группыы вкладок) при выборе жертвы.

Конфиг для earlyoom:

EARLYOOM_ARGS="--prefer '^Web Content$'"

или

EARLYOOM_ARGS="--prefer '^firefox$'"

Конфиг nohang:

@BADNESS_ADJ_RE_NAME  300  ///  ^Web Content$

или

@BADNESS_ADJ_RE_NAME  300  ///  ^firefox$

В nohang-desktop предпочтение Web Content настроено по умолчанию.

hakavlad ★★★
()
14 сентября 2020 г.
Ответ на: комментарий от hakavlad

Кстати, а кто подскажет, откуда брать содержимое, типа

^Web Content$

?

ps aux показывает строку процесса, а это, как я понимаю - имя. Т.е. нужно рассматривать что-то вроде:

ps auxwww | grep firefox | grep -v grep | awk '{print $2}' | xargs -I{} cat /proc/{}/comm

верно я понимаю?

hatred ★★★
()
Ответ на: комментарий от hatred

Я подскажу. С пакетом идет скрипт oom-sort, он дает Name и cmdline:

$ oom-sort
oom_score oom_score_adj  UID   PID Name            VmRSS   VmSwap   cmdline
--------- ------------- ---- ----- --------------- ------- -------- -------
       34             0 1000 23805 firefox-esr       694 M      0 M /usr/lib/firefox-esr/firefox-esr -P ytfyjt
       27             0 1000 23902 Web Content       562 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       22             0 1000 26855 Web Content       469 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 27 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       20             0 1000 27015 Web Content       408 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 31 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       15             0 1000 26827 Web Content       323 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 26 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       12             0 1000 26692 Web Content       244 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 25 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       11             0 1000 26900 Web Content       229 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 28 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
       11             0 1000 26962 Web Content       229 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 30 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
        9             0 1000 26931 Web Content       201 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 29 -isForBrowser -prefsLen 7427 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
        8             0    0  1737 Xorg              165 M      0 M /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
        8             0 1000 23943 WebExtensions     165 M      0 M /usr/lib/firefox-esr/firefox-esr -contentproc -childID 2 -isForBrowser -prefsLen 56 -prefMapSize 189386 -parentBuildID 20200817150009 -greomni /usr/lib/firefox-esr/omni.ja -appomni /usr/lib/firefox-esr/browser/omni.ja -appdir /usr/lib/firefox-esr/browser 23805 true tab
        5             0 1000  3397 dolphin           107 M      7 M dolphin
        4             0 1000 20646 kwrite             86 M      0 M /usr/bin/kwrite /home/user/Downloads/FAQ.ru.md (18).txt
        4             0 1000 27663 kate               97 M      0 M /usr/bin/kate -b /home/user/python/memdler2/nohang-01-2/noh-coc9/nohang/README.md
        3             0 1000 21301 konsole            70 M      1 M konsole [kdeinit5] --workdir /home/user/python/memavaild_DIR/memavaild
        3             0 1000 27639 kwrite             79 M      0 M /usr/bin/kwrite /home/user/python/memavaild_DIR/memavaild/README.md
        2             0    0   377 systemd-journal    61 M      0 M /lib/systemd/systemd-journald

ps -e также дает имена (но там сортировка по пид, и ядерные треды показаны, они нас не интересуют).

oom-sort -l0 дает вывод без cmdline:

$ oom-sort -l0
oom_score oom_score_adj  UID   PID Name            VmRSS   VmSwap
--------- ------------- ---- ----- --------------- ------- --------
       36             0 1000 23805 firefox-esr       743 M      0 M 
       27             0 1000 23902 Web Content       557 M      0 M 
       24             0 1000 26855 Web Content       497 M      0 M 
       19             0 1000 27015 Web Content       396 M      0 M 
       15             0 1000 26827 Web Content       325 M      0 M 
       12             0 1000 26692 Web Content       245 M      0 M 
       11             0 1000 26900 Web Content       229 M      0 M 
       11             0 1000 26962 Web Content       230 M      0 M 
        9             0 1000 26931 Web Content       201 M      0 M 
        8             0    0  1737 Xorg              165 M      0 M 
...

см также oom-sort -h

hakavlad ★★★
()
Последнее исправление: hakavlad (всего исправлений: 2)
Ответ на: комментарий от hakavlad

Спасибо! Как я понял, моё решение тоже верное, только не самым простым путём :)

Вот только как селективно вышибать Java приложения:

       24             0  1000   34639 java              389 M      0 M /bin/java -jar /usr/share/java/davmail/davmail.jar /home/hatred/.config/davmail/default.properties

это вопрос.

hatred ★★★
()
Последнее исправление: hatred (всего исправлений: 1)
Ответ на: комментарий от hatred

По имени (java), по exe_realpath (regex: ^/bin/java$). В чем вопрос? Я может не понял. Что значит селективно? А как иначе?

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

Нет, нужно не именно Java, а убить машину только для davmail, к примеру, или SubGit. Но все они будут запущенны и видны как java в имени или exe_realpath.

hatred ★★★
()
Ответ на: комментарий от hatred

В cmdline различие видно.

@BADNESS_ADJ_RE_CMDLINE  345 /// davmail

или

@BADNESS_ADJ_RE_CMDLINE  543 /// /usr/share/java/davmail

или

@BADNESS_ADJ_RE_CMDLINE  666 /// /davmail/

Например так.

Минус в том, что при тяжелом своппинге cmdline могут обрабатываться медленнее, жертва ищется дольше.

Попробуйте это.

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

О! Вот это спасибо, если что потыкаю. Свопа, конечно, нет, но и без него диск может активно юзаться: кеши выгружаются и всякие shared objects (если не помечены соответствующим образом) тоже, приходится подсасывать на каждый чих обратно с диска.

hatred ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.