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 МБ памяти.
Ответы
Ответ 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/