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

Согласно 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 

4 Solutions collect form web for “Что использует память?”

Проблема может быть связана с разделяемой памятью, которая не учитывается многими утилитами, потому что разделена между несколькими процессами. Вы можете проверить с 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`: формат вывода

  • Много свободной памяти, но Java не запускается (SunOS 5.10)
  • Что такое «Системная память», отображаемая в nmon в AIX?
  • Почему Linux использует интерфейс символьного устройства для / dev / mem?
  • Какие части исполняемого файла ELF загружаются в память и где?
  • Мониторинг процессов с использованием только системных вызовов (без утилит, таких как `top`)
  • Список всех файлов, присутствующих в кеше
  • htop сообщает о гораздо большем использовании памяти, чем бесплатное или верхнее
  • Как запретить доступ к физической памяти в Linux?
  • Отслеживание использования памяти Linux, когда не отображается в кеше
  • Почему объекты плиты не возвращаются автоматически
  • возможно ли задержать Linux OOM Killer и запустить мой процесс?
  • Linux и Unix - лучшая ОС в мире.