Чому Red Hat Linux повідомляє про меншу кількість вільної пам’яті в системі, ніж є насправді?


9

У мене порівняно невеликий домашній сервер Red Hat Linux (близько 8 ГБ ОЗУ). Я не використовую його для багато іншого, ніж для запуску деяких домашніх додатків для відстеження різних речей. Єдині реальні речі, які працюють у вікні, - це база даних та веб-сервер.

Я помітив, що при перевірці системних лічильників за допомогою таких інструментів, як NMON і TOP, загальна системна вільна пам'ять є відносно низькою (близько кількох сотень МБ), тоді як активна пам'ять для бази даних та веб-сервера все ще низька (лише споживають комбіновані 3 ГБ). Навіть при включенні всіх інших запущених процесів загальна споживана пам'ять становить менше 4 ГБ.

Чому Red Hat Linux повідомляє про менше вільної пам'яті, ніж загальна пам'ять за мінусом суми використаної пам'яті запущених процесів?

Відповіді:


19

Не плутайте вільну пам'ять із невикористаною пам'яттю. Вільна пам'ять, у світі Unix - це сторінка фізичної пам’яті, яка не має в ній відображених логічних даних. У невикористаній пам’яті є деякі дані, відображені в ній, але в даний час він не використовується в активному процесі.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (і всі ОС Unix) намагаються мати якомога менше вільної пам'яті. Натомість вони використовують пам'ять, яка не відображається активно на процеси в операційній ОС для таких речей, як кеш файлів і буфери для різних операцій передачі вводу-виводу.

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

  1. Пам'ять можна розділяти між різними процесами за допомогою розподілу пам'яті Copy-On-Write , IO, відображеної в пам'яті, і динамічних бібліотек .
  2. Операційна система може вільно обіцяти додатку більше пам’яті, ніж реально постачала. Теорія полягає в тому, що більшість авторів програм вважають за краще просити велику кількість пам'яті за один раз, щоб уникнути накладних витрат і, можливо, фактично не використовувати всю цю пам'ять.

На недавній статті на lwn.net обговорюється це питання .


1
Просте пояснення також надано тут: linuxatemyram.com
Стівен Т. Снайдер

4

Linux активно кешуватиме доступ до файлової системи в пам'ять, щоб швидше отримати доступ до диска. Нічого турбуватися.

Запуск безкоштовно -m на коробці дасть вам краще уявлення про те, де використовується пам'ять.

Нижче наводиться вихід з одного з моїх ящиків. Вільна пам'ять - 147Meg, майже 4G кешована для запитів доступу до файлової системи.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722

1

Ви також включаєте поля "забудований" та "кешований"?


1

З Linux, подивіться на Committed_AS в / proc / meminfo, це об'єм пам'яті (реальний + swap), який ядро ​​насправді обіцяло запускати процеси.

Linux використовує пам'ять дуже ефективно, будь-які блоки, не обіцяні якомусь процесу, використовуються для кешування недавно / часто доступних файлів. Отже, для Linux типово використовувати 90% всієї доступної фізичної пам'яті недовго після завантаження.

Подивіться, що ядро ​​взяло на себе зобов’язання забезпечити .. та брудне (своп) використання, це дає кращу загальну картину.

Якщо вам потрібно скорегувати цю поведінку, будь ласка, оновіть своє питання :)

Це стандартний МО для Linux .. Деякі дистрибутиви налаштовують управління пам'яттю відповідно до їх потреб через sysctl. Однак те, про що ви повідомляєте, досить типове серед усіх.


1

Яке ядро ​​працює у системі? 32-бітове ядро ​​повідомляє лише про 3,6 ГБ пам’яті, якщо не буде складено з включеним PAE.

Кажучи, що якщо це сучасна версія Redhat Enterprise Linux (або CentOS) - v3 і далі - 32-бітове ядро ​​за замовчуванням матиме це.

Якщо ви зможете опублікувати вихідну команду 'free', детально описану вище, ми зможемо побачити, чи це проблема.

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