як налаштувати Linux на виклик oom_kill самостійно


6

Я не хочу, щоб мій комп'ютер міняв дані на диск. У мене немає розділу підкачки:

$ free
             total       used       free     shared    buffers     cached
Mem:       3841912    3670012     171900          0      74980     699652
-/+ buffers/cache:    2895380     946532
Swap:            0          0          0

Ще в цей день (можливо, нещодавно як ядро ​​2.4?) Це працювало. Голодні процеси пам'яті будуть вбиті вбивцею оому, і я б перезапустив їх. Але зараз (Linux 2.6.38-8-generic # 42-Ubuntu SMP пн Apr 11 03:31:24 UTC 2011 x86_64) google-chrome (13.0.782.24 beta) регулярно відправляє мою машину в смертельну спіраль заміни. Або, принаймні, щось схоже на заміну: оновлення X вікон відбувається назавжди, припливи диска, панель пам'яті панелі gnome потрапляє до стелі, і я бачу це повідомлення в системному журналі:

rtkit-daemon[1771]: The canary thread is apparently starving. Taking action.
rtkit-daemon[1771]: Demoting known real-time threads.
...

Але, за даними syslog, ядро ​​не запускає вбивцю oom. Для хорошої міри, я ставлю swappiness до 0:

$ cat /proc/sys/vm/swappiness
0

Мій обхідний шлях полягає у використанні ctrl-alt-sysrq-f, коли це починається. Хто-небудь має рецепт для налаштування Linux для запуску oom_kill самостійно, в цій ситуації?


1
Ви впевнені, що OOM Killer насправді не працює? Це, звичайно, можливо, що Chrome ухиляється від убивця OOM. Запустіть другу програму тут щоб побачити, чи вбивця OOM працює чи ні.
new123456

Я впевнений, що вбивця OOM не працює, як тільки я хотів би. Єдиний раз, коли я бачу "викликаний oom-killer" в syslog, коли я викликаю його вручну - після більш ніж хвилини заміни.
Joe

Оновлення: я на ядрі 3.0.0 (і нове обладнання) і проблема залишається. Я повинен бути проактивним у вбивстві google-chrome, тому що як тільки він потрапляє глибоко в спіраль смерті, навіть магічний ключ sysrq не зможе відновити систему.
Joe

Я не розумію цього питання: якщо у вас не було налаштовано місця підкачки, як ви помінялися?
Michael Hampton

Ну, як говорилося в питанні, це відчував як обмін в тому, що машина буде повільний шлях вниз, і було б важко отримати програми, щоб відповісти, але вони б, врешті-решт. Можливо, ядро ​​чекало, коли chrome вивільнить пам'ять або щось інше.
Joe

Відповіді:


4

OOM не обов'язково вбиває процес, який, на вашу думку, буде. Читайте тут: http://lwn.net/Articles/317814/

Я підозрюю, що відбувається тому, що chrome використовує інший процес для кожної сторінки, це заплутує евристику OOM-кіллера та інші процеси, а не батьківський процес chrome.

Згідно з це , OOM-вбивця любить вбивати niced процеси. Отже, постарайтеся встановити chrome на точність, більшу, ніж 0 .. Можливо, це буде більше цілі :-)


Я думаю, що ваша підозра щодо хрому знаходиться на правильному шляху. Здається, він працює таким чином, що плутає евристику OOM-кіллера. Перша програма на сторінці new123456 посилається на плутанину мого ядра таким же чином: вона виділяє багато пам'яті і робить систему невідповідною, але вбивця OOM не вбиває його (принаймні протягом однієї хвилини).
Joe

0

Я прийшов до висновку, що сучасний linux не любить працювати без віртуальної пам'яті. Можливо, позбувшись своп сенсу в дні повільних жорстких дисків / старших алгоритмів VM / і т.д.

Але я працював з файлом підкачки протягом останніх кількох місяців, і я набагато щасливіший з поведінкою моєї машини з низькою пам'яттю. Це трохи сповільнюється на межі, але легко втрутитися і знищити голодні процеси, щоб повернути справу назад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.