На додаток до інших відповідей, ви можете налаштувати Linux так, щоб вимагати резервного копіювання для будь-якої виділеної пам'яті, навіть якщо програми не використовують її.
Однак перенапруження пам'яті та побоювання вбивці OOM не є необхідною частиною досвіду Linux. Просто встановивши параметр sysctl vm / overcommit_memory на 2, вимикається поведінка перезаключення та постійно залишається вбивцею OOM. У більшості сучасних систем повинно бути достатньо місця на диску, щоб забезпечити достатній обмінний файл для більшості ситуацій. Замість того, щоб намагатися уберегти домашніх процесів від загибелі, коли закінчується перезавантажена пам'ять, може бути простіше просто уникнути ситуації. [ Відпочинок від вбивці ООМ ]
Якщо програма виділяє пам'ять, ядро може просто позначити більше сторінок свопінгу як виконані. Цей показник зберігається в диспетчері пам'яті ядра, фактичне місце на диску ще не торкнулося. Поки ця пам'ять не використовується, насправді нічого не потрібно міняти та виключати. Якщо вони ніколи не використовуються, то використання своп буде коливатися, не впливаючи на продуктивність.
Оскільки процеси представлені власним адресним простором або "переглядом" (саме так працює своп в першу чергу), ядро має багато свободи в тому, як це управляє. Використовуючи приклад вилки також із статті, зв'язаної вище, оскільки набагато більше шансів мати спільні сторінки пам’яті, ніж це для свіжого виділення великого обсягу невикористаної пам’яті, пам’яті можна виділити копіювати при записі, збільшуючи кількість використання підкачки. Коли це фактично записано в (що може не статися), то цей "здійснений своп" можна замінити будь-якою невикористаною оперативною пам'яттю (тоді збільшується використання оперативної пам'яті та зменшується використання swap). Уявіть собі процес з виділеним 500 Мб, який роздвоюється на машині з усією або майже всією оперативною пам’яттю. Якщо в swap доступно 500 Мб (а місця на диску дешево, наскільки 1% сьогоднішніх накопичувачів TB?: P), пам'ять не потрібно копіювати (поки що,
Таким чином, виключається можливість вбивці OOM, і набагато простіше розробити більшість програмного забезпечення з припущенням, що розподіли пам'яті (включаючи "неявні" розподіли через щось на зразок fork) або успішно або негайно припиняються, з практичним усвідомленням того, що якщо пам'ять повинна бути обмінятися, то це може вплинути на продуктивність. Цей вплив майже завжди незначний, але в гіршому випадку призводить до обміну молотком (все-таки іноді краще відмовитись від ядра або вбивці OOM).
Хоча я не знаю точних деталей того, як працює менеджер пам’яті Linux, ця відповідь - це моє власне узагальнене розуміння і те, що я пам’ятаю, читаючи роками. Я намагався відредагувати цю відповідь, щоб вимагати мінімального розуміння дизайну ОС (це значно складне і не те, що я страшенно зацікавлений в собі), але це, здається, трохи розхитається; будь ласка, повідомте мене, якщо ви бачите, як це можна вдосконалити. Що стосується стискаючої руки, це може бути не таким бентежним основним питанням.