Подтвердить что ты не робот

Linux бесплатно показывает высокую память, но топ не

В RedHat Linux 6.2 я запускаю free -m, и он показывает почти все 8GB используемые

             total       used       free     shared    buffers     cached
Mem:          7989       7734        254          0         28       7128
-/+ buffers/cache:        578       7411
Swap:         4150          0       4150

Но в то же время в top -M я не вижу никаких процессов, использующих всю эту память:

top - 16:03:34 up  4:10,  2 users,  load average: 0.08, 0.04, 0.01
Tasks: 169 total,   1 running, 163 sleeping,   5 stopped,   0 zombie
Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 98.6%id,  0.4%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  7989.539M total, 7721.570M used,  267.969M free,   28.633M buffers
Swap: 4150.992M total,    0.000k used, 4150.992M free, 7115.312M cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1863 sroot     20   0  398m  24m 9.8m S  0.3  0.3   3:12.87 App1
    1 sroot     20   0  2864 1392 1180 S  0.0  0.0   0:00.91 init
    2 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.07 migration/0
    4 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.08 migration/1
    8 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1

Я также пробовал этот ps mem script, но он отображает примерно 400 МБ памяти.

4b9b3361

Ответ 1

Не смотрите на строку "Mem", посмотрите на нее ниже.

Ядро Linux потребляет столько памяти, сколько может, для обеспечения кэша ввода-вывода (и других некритических буферов, но кеш будет большей частью этого использования). Эта память отказывается от процессов, когда они ее запрашивают. Строка "-/+ buffers/cache" показывает вам скорректированные значения после учета кэша ввода-вывода, то есть объема памяти, используемого процессами, и количества доступных для процессов (в этом случае используется 578 МБ и 7411MB бесплатно).

Разница в используемой памяти между линией "Mem" и "- + + buffers/cache" показывает, сколько используется ядром для целей кеширования: 7734MB - 578MB = 7156MB в кеше ввода/вывода, Если процессам нужна эта память, ядро ​​просто уменьшит размер кэша ввода-вывода.

Ответ 2

Также, как показывает первая строка total used free shared buffers cached Mem: 7989 7734 254 0 28 7128 -/+ buffers/cache: 578 7411

Если мы добавим (кешированные [7128] + буферы [28] + free [254]), мы получим примерно вторую строку бесплатно [7411] значение 7128 + 28 + 254 = 7410

Ответ 3

Если кешируется мало, попробуйте следующую команду:

ps aux --sort -rss

Ответ 4

Linux заимствует неиспользуемую память для кэширования диска.

'free' показывает доступную память в столбце "available".

При установке до 2016 года посмотрите на столбец "free" в строке "-/+ buffers/cache".

Лучшее объяснение высокого использования памяти в Linux здесь: https://www.linuxatemyram.com/