Что использует память?

Согласно htop и free , машина, на которую я смотрю, в настоящее время находится на 6631/11907 МБ ОЗУ. Это более или менее половина доступной оперативной памяти. Однако, когда я сортирую top или top помощью MEM%, большая часть памяти используется Xorg с 0,8% MEM. gnome-settings использует 0,3%, а пара других использует 0,1%. Эти проценты не составляют до 50%.

Как я могу узнать, что использует ~ 50% памяти, и почему я не вижу это использование памяти в top / htop?

Выход free -mt :

  total used free shared buffers cached Mem: 11907 10660 1246 0 650 3379 -/+ buffers/cache: 6629 5277 Swap: 3999 26 3973 Total: 15907 10686 5220 

EDIT : по запросу …

vmstat 1 5

 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- rb swpd free buff cache si so bi bo in cs us sy id wa st 0 0 26640 312180 695976 4229988 0 0 4 34 0 1 1 1 96 2 0 0 0 26640 312032 695976 4230016 0 0 0 0 157 191 0 0 100 0 0 0 0 26640 312156 695976 4230016 0 0 0 0 158 270 0 0 100 0 0 0 0 26640 312156 695976 4230016 0 0 0 0 128 189 0 0 100 0 0 0 0 26640 312156 695976 4230016 0 0 0 0 212 308 0 0 100 0 0 

cat / proc / meminfo

 MemTotal: 12192876 kB MemFree: 311644 kB Buffers: 695984 kB Cached: 4230016 kB SwapCached: 7684 kB Active: 1378792 kB Inactive: 3656424 kB Active(anon): 2192 kB Inactive(anon): 108500 kB Active(file): 1376600 kB Inactive(file): 3547924 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4095992 kB SwapFree: 4069352 kB Dirty: 28 kB Writeback: 0 kB AnonPages: 102412 kB Mapped: 52116 kB Shmem: 1456 kB Slab: 5584084 kB SReclaimable: 4402760 kB SUnreclaim: 1181324 kB KernelStack: 3176 kB PageTables: 17852 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 10192428 kB Committed_AS: 678004 kB VmallocTotal: 34359738367 kB VmallocUsed: 185496 kB VmallocChunk: 34359540220 kB HardwareCorrupted: 0 kB AnonHugePages: 28672 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 5177316 kB DirectMap2M: 7403520 kB DirectMap1G: 0 kB 

    Проблема может быть связана с разделяемой памятью, которая не учитывается многими утилитами, потому что разделена между несколькими процессами. Вы можете проверить с smemstat утилиты smemstat («использование памяти отчета с разделяемой памятью пропорционально»).

    EDIT: значительная часть памяти также может быть использована ядром (включенным в used значение free вывода). Посмотрите содержимое /proc/meminfo . Согласно отслеживанию «отсутствия» использования памяти в Linux , Slab + Shmem + KernelStack + PageTables дает пространство ядра. Слэб кажется довольно важным в целом.

    У других пользователей были проблемы:

    • Использование ОЗУ не складывается? (Free + used <total) (из-за ошибки, связанной с NFS)
    • Несоответствие между используемой памятью и суммой использования памяти приложения

    Существует два возможных объяснения расхождения:

    • Вы находитесь на виртуальной машине, и есть общая память.
    • У вас много, много процессов, которые потребляют незначительное количество памяти, но при агрегировании они потребляют гораздо больше памяти.

    Первое легко определить, второе … аналогично, но с предостережением вам нужно найти несколько процессов, которые используют вашу оперативную память. ps, uniq и сортировка могут помочь вам:

     ➜ ~ ps axco command | uniq -c | sort -nr | head 2 xdg-open <defunct> 2 mplayer 1 zsh 1 zsh 1 zsh 1 x-session-manag 1 xprop 1 Xorg 1 writeback 1 watchdog/0 

    С помощью этого вы можете увидеть, есть ли процесс изгоев, вызывающий себя, и использование вашей памяти.

    Вы уже получили свой ответ со свободной командой, поэтому,

     free -m -/+ buffers/cache: 6629 5277 

    это то, что вам нужно, чтобы эти значения были реальной памятью, поэтому у вас есть 5277 реальной свободной памяти, и вы так не видите ее top или top

    Первое поле бесплатно:

      total used free shared buffers cached Mem: 11907 10660 1246 0 650 3379 

    Это показывает память, которая фактически зарезервирована ОС (ядро), а не реальна, используемая без буферов, вы можете проконсультироваться с vmstat для получения дополнительной информации и модуля mdb -k чтобы проверить использование memmory ядром и вычислить его с помощью vaulues из free команды.

    Поскольку я уже указывал, что ваша память зарезервирована (кэширована) ядром, и она остается там, пока некоторые из приложений не запросят ее. Вот почему вы не можете видеть, какой процесс использует его.

    Пожалуйста, дайте вывод cat /proc/meminfo и cat /proc/meminfo поле кеша, которое на самом деле используется ядром!

    У вас есть 1246 МБ полностью свободной памяти, НО 5277 мб, которые вы видите, не имеет «кэшированной» памяти. Это означает, что ОС поставила некоторые вещи в вашей памяти быстрее. Он называет это «использованным» (поэтому ваш «свободный» номер – только 1246), но он действительно доступен для вас, если вам это нужно.

    см. этот ответ: `free`: формат вывода