Гм, я не повністю переконаний в аргументах на користь переборщика та вбивці ОМВ ... Коли жінка пише,
"Убивця OOM спричиняє шкоду лише в тому випадку, якщо ви перевантажили свою систему. Дайте їй достатню кількість підкачок і не запускайте додатки, які раптом вирішать їсти велику кількість оперативної пам'яті, і у вас не виникне проблем".
Він розповідає про сценарій оточення, коли забороняється перевиконання та вбивця OOM не застосовуються, або не реально діють (якщо всі програми виділяли пам’ять за потребою, і було достатньо виділити віртуальну пам'ять, запис пам'яті пильно слідкує за розподілом пам'яті без помилок, тому ми не могли реально говорити про переналагоджену систему, навіть якщо була включена стратегія перевиконання). Йдеться про неявне визнання, що надмірний комітет і вбивця ООМ найкраще спрацьовує тоді, коли їхнє втручання не потрібне, на що якимось чином поділяється більшість прихильників цієї стратегії, наскільки я можу сказати (і, я визнаю, я не можу сказати багато чого ...). Morover, посилаючись на програми із специфічною поведінкою при попередньому розміщенні пам'яті, змушує мене думати, що конкретне керування може бути налаштоване на рівні розповсюдження, а не за замовчуванням,
Для того, що відносяться до JVM, ну, це віртуальна машина, в деякій мірі , необхідно виділити всі ресурси, необхідні при запуску, так що він може створити своє середовище «підроблені» для її застосування, і тримати його доступний ресурс відокремлена від хоста навколишнє середовище, наскільки це можливо. Таким чином, може бути кращим, щоб він не працював під час запуску, а не через деякий час, як наслідок «зовнішньої» умови OOM (спричиненої вбивцею OOM / OOM / будь-яким іншим), або в будь-якому випадку страждав від такого стану, що втручався в його власний внутрішні стратегії обробки OOM (загалом, VM повинен отримувати будь-які необхідні ресурси з самого початку, а хост-система повинна «ігнорувати» їх до кінця; так само, як і будь-яка кількість фізичного тарана, спільного з відеокартою, ніколи - і не може бути - торкнувся ОС).
Щодо Apache, я сумніваюся, що час від часу вбивати і перезавантажувати весь сервер краще, ніж дозволити одній дитині разом з одним з'єднанням провалитися з початку (= дитини / з'єднання) початку (як би це був цілий новий екземпляр JVM, створений після іншої інстанції, деякий час запускається) Я думаю, що найкраще «рішення» може залежати від конкретного контексту. Наприклад, розглядаючи послугу електронної комерції, може бути набагато кращим мати іноді декілька підключень до діаграми покупок, яка не виходить випадковим чином, а не втратити всю послугу, ризикуючи, наприклад, перервати поточне завершення замовлення, або (можливо гірше) процес оплати з усіма наслідками справи (може бути нешкідливим, але, можливо, корисним - і точно, коли виникли проблеми,
Таким же чином, на робочій станції процес, який витрачає найбільше ресурсів, і таким чином, щоб стати першим вибором для вбивці OOM, міг би бути інтенсивним в пам'яті додатком, таким як відеопередавач чи програмне забезпечення для візуалізації, ймовірно, єдиним додатком користувач хоче бути недоторканим. Ці міркування натякають на мене, що політика дефолту OOM вбивць занадто агресивна. Він використовує "найгірший підхід" підхід, який певним чином схожий з деякими файловими системами (OOMK намагається звільнити стільки пам'яті, скільки може, зменшуючи кількість вбитих підпроцесів, щоб запобігти подальшому втручанню за короткий час, як а також fs може виділити більше дискового простору, ніж фактично потрібно для певного файлу, щоб запобігти подальшому розподілу, якщо файл виріс і, таким чином, певною мірою запобігаючи фрагментації).
Однак я думаю, що протилежна політика, наприклад, "найкраще підходить", може бути кращою, щоб звільнити точну пам'ять, яка потрібна в певний момент, і не турбуватися з "великими" процесами, які цілком можуть витрачати пам'яті, але також може і не бути, і ядро не може цього знати (гм, я можу уявити, що відстеження кількості доступу до сторінки та часу може натякати, якщо процес виділяє пам'ять, йому більше не потрібно, тому здогадуватися, чи є процес витрачає пам'ять або просто використовує багато, але затримки доступу повинні бути зважені на циклах процесора, щоб відрізнити втрату пам’яті від пам’яті та інтенсивного використання процесора, але, хоча потенційно неточна, така евристика може мати надмірні витрати).
Більше того, це може бути неправдою, що вбивство меншої кількості можливих процесів - це завжди хороший вибір. Наприклад, у середовищі робочого столу (давайте придумаємо неттоп або нетбук з обмеженими ресурсами, для зразка) користувач може запустити браузер з декількома вкладками (таким чином, споживає пам'ять - припустимо, це перший вибір для OOMK) , плюс кілька інших додатків (текстовий процесор із не збереженими даними, поштовий клієнт, зчитувач PDF, медіаплеєр, ...), плюс кілька (системних) демон, а також кілька екземплярів файлового менеджера. Тепер трапляється помилка OOM, і OOMK вирішує знищити браузер, тоді як користувач робить щось, що вважається "важливим" через мережу ... користувач буде розчарований. З іншого боку, закриття кількох файлових менеджерів "
У всякому разі, я думаю, що користувачеві слід дати можливість самостійно приймати рішення про те, що робити. У настільній (= інтерактивній) системі це зробити досить просто, за умови, що достатньо ресурсів зарезервовано для того, щоб попросити користувача закрити будь-яку програму (але навіть закриття декількох вкладок може бути достатньо) та обробляти його вибір (варіант може складаються з створення додаткового файлу swap, якщо є достатньо місця). Для сервісів (і загалом) я також розглядаю два можливі вдосконалення: одне - це реєстрація вбивчих інтервенцій OOM, а також процеси, що починаються / виправляють збої таким чином, що помилка може бути легко налагоджена (наприклад, API може інформувати процес, що видає нове створення процесу або розгортання - таким чином, такий сервер, як Apache, з належним патчем, може забезпечити кращу реєстрацію певних помилок); це можна зробити незалежно від того, щоб надмірно / комітетом докладати зусиль; по-друге, але не важливо, міг би бути створений механізм для тонкої настройки алгоритму OOMK - я знаю, що можна певною мірою визначити конкретну політику на основі процесу, але я б націлив «централізований» механізм конфігурації, заснований на одному або кількох списках імен додатків (або ідентифікаторів) для виявлення відповідних процесів та надання їм певної міри важливості (відповідно до перелічених атрибутів); такий механізм повинен (або, принаймні, міг би) також бути шаруватим, щоб міг бути визначений користувачем список вищого рівня, список, визначений системою (розподілом), та визначений додатком (нижній рівень) записів (так наприклад, менеджер файлів DE може доручити OOMK безпечно вбити будь-який екземпляр,
Morover, API може бути наданий для того, щоб додатки могли підняти або знизити рівень їх важливості під час виконання (щодо цілей управління пам'яттю та незалежно від пріоритету виконання), так що, наприклад, Word-процесор міг би починати з низька «важливість», але підвищуйте її, оскільки деякі дані зберігаються перед передачею у файл або виконуються операції запису, і знову важливіше, як тільки така операція закінчується (аналогічно, менеджер файлів може змінити рівень, коли він перейшов з просто запалювання файлів для роботи з даними та viceversa, замість того, щоб використовувати окремі процеси, і Apache міг надавати різного рівня важливості різним дітям або змінити стан дитини відповідно до певної політики, яку вирішили систематики та викриті через Apache - або будь-який інший тип сервера - налаштування). Звичайно, такий API може і може бути зловживаний / неправомірно використаний, але я думаю, що це незначне занепокоєння в порівнянні з ядром, що самовільно вбиває процеси, щоб звільнити пам'ять без будь-якої відповідної інформації про те, що відбувається в системі (і споживання пам'яті / час створення або подібні арени 'не достатньо релевантного або' валідаційного 'для мене) - лише користувачі, адміністратори та автори програм можуть дійсно визначити, чи потрібен процес з якихось причин, в чому причина та / або чи програма перебуває у стані, що веде за собою до втрати даних або інших пошкоджень / неприємностей, якщо вони вбиті; однак, деякі припущення ще можуть бути зроблені, наприклад, пошук ресурсів певного виду (дескриптори файлів, мережеві розетки тощо), придбані процесом, і при виконанні операцій, що перебувають у стані очікування, могли б визначити, чи повинен процес бути у вищому «стані», ніж один набір,
Або просто уникайте перевиконання і нехай ядро робить саме те, що має робити ядро, виділяючи ресурси (але не рятуючи їх довільно, як це робить вбивця OOM), планування процесів, запобігання голодуванню та тупикам (або рятування від них), забезпечення повного викупу та розділення простору пам'яті тощо.
Я також хотів би витратити ще кілька слів про підходи до перевиконання. З інших обговорень я висловив думку про те, що одна з головних проблем щодо надмірної передачі (як причина, щоб цього захотіти, так і як джерело можливих неприємностей) полягає у поводженні з виделками: чесно, я не знаю, як саме копіювати, реалізована стратегія "на запис", але я думаю, що будь-яка агресивна (або оптимістична) політика може бути пом’якшена стратегією локальної локації. Тобто замість того, щоб просто клонувати (і коригувати) роздвоєні кодові сторінки та структури планування, кілька інших сторінок даних можна було скопіювати перед фактичним записом, вибравши серед тих сторінок, до яких батьківський процес звертався до запису частіше (тобто використання лічильника для операцій запису).
Все, звичайно, ІМХО.