У меня есть Kubuntu 16.04, и использую ZFS.
Как Вы видите на суперпользователе, у меня просто было долгое путешествие в разыскивании, где моя память исчезала к.
Это оказалось ARC ZFS, который съедал его, не обнаруживаясь нигде в инструментах/файлах кроме его собственного специального файла /proc/spl/kstat/zfs/arcstats
Существует ли универсальный способ видеть, сколько памяти используется ядром и, если возможно, который модули ядра?
Пример:
свободный-h показывал мне это:
total used free shared buff/cache available
Mem: 31G 19G 1.8G 406M 10G 5.2G
Swap: 8.0G 0B 8.0G
Так используемых 19 ГБ. Но TOP только показал мне приблизительно 8 ГБ используемой памяти. Таким образом, я отправился на поиски других 11 ГБ. 6 ГБ оказались плитой, которая видна в /proc/memstat
и с nmon
. Но 5 ГБ все еще отсутствовали.
В конце я нашел, что он был использован ARC ZFS. Но это было только перечислено в его собственном специальном информационном файле. /proc/spl/kstat/zfs/arcstats
Ни один /proc/memstat
ни top
, htop
, nmon
, free
, или atop
мог сказать мне, кто использует тех 5 ГБ.
Существует ли файл/инструмент для наблюдения памяти, используемой такими специальными модулями, не зная/понимая те модули? Или я должен объяснить каждый существующий модуль, если я хотел бы записать контрольный инструмент, который может сказать мне это?
С моей точки зрения информация о памяти в соответствии с Linux является общей путаницей. Дюжина числа, что все не составляют в целом общую память.Держу пари free
вычисляет "используемый" параметр substracting освобождают/кэшируют/буферизуют от общего количества.
Я хотел бы/писать инструмент/информация, где я вижу
Total memory: 32GB
in use: 19GB
processes: 8GB
slab: 5GB
mapper: 1Gb
kernel modules: 5Gb
kernel: 0.3GB
spl: 4.7GB
cache: 6GB
buffers: 2GB
free: 5GB
Additional stats:
Active memory: 8.3GB
Active(anon): 7.1GB
Active(file): 1.2GB
Inactive memory: 2.4GB
...
Вы знаете, где каждый подраздел на самом деле адреса до его родительского раздела и каждого байта памяти составляется ;)
Таким образом, действительно ли такой инструмент возможен в соответствии с Linux? Это уже существует?
Обновление 1
Инструмент smem, как предложено ниже действительно показывает colum "Динамическая память ядра", которая суммирует до 100% памяти и составляет ARC. Однако согласно этому ответу
BTW: Я уже проверил smem источники, это в основном делает (memtotal - пространство пользователя - свободный - кэш).
Таким образом, это только достигается просто substracting все известные числа от/proc/memstat и маркировки, что отсутствует как "некэш Динамическая Память ядра", я нахожу это тревожащим и действительно надеюсь, что ядро Linux имеет больше для предложения, чем это.
Вы могли бы попробовать smem
по крайней мере, для приятной части того, что Вы ищете.
Это доступно в репозитории Вселенной и может быть установлено с sudo apt-get install smem
Существует много полезных переключателей, которые покрыты на странице справочника man smem
Некоторые примеры следующие: Обратите внимание, что я использую переключатель-t для общих количеств во всех примерах для краткости. можно пропустить его, если Вы хотите больше подробного вывода.
PSS is the interesting column in these examples as it takes shared memory into account.
Unlike RSS it's meaningful to add it up.
В масштабе всей системы
me@zippy-64bit:~$ smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 989656 860076 129580
userspace memory 936032 180020 756012
free memory 5692716 5692716 0
----------------------------------------------------------
7618404 6732812 885592
Пользователем
me@zippy-64bit:~$ smem -tu
User Count Swap USS PSS RSS
me 67 0 861452 898915 1245592
---------------------------------------------------
67 0 861452 898915 1245592
Также знаменитый smemcap для получения данных для будущего анализа с smem
и smemstat, который сообщает об использовании физической памяти, учитывающем общую память. Инструмент может или сообщить о текущем снимке использования памяти или периодически разгрузить любые изменения в памяти.
Существует также список внизу страницы подобных пакетов.
Источники:
man smem
Альтернативный 1: Вы могли бы также рассмотреть парсинг вывода cat /proc/meminfo
или если Вы хотите это страницей less /proc/meminfo
Большая часть информации здесь используется free
, top
и ps
команды. На самом деле вывод бесплатной команды подобен по внешности содержанию и структуре/proc/meminfo. Но путем рассмотрения непосредственно/proc/meminfo, намного больше деталей показано включая:
$ cat /proc/meminfo | grep "Slab"
Slab: 267680 kB
Альтернативный источник: https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-proc-topfiles.html
Альтернативные 2: Если Вы действительно посвящаете себя лучшему парсингу RAM ядра, Вы могли бы прокрутить свой собственный kstat. В то время как kstat
кажется, Солярис, только управляют. ссылка выше возьмет Вас к источникам для для попытки с открытым исходным кодом kstat
это было в последний раз изменено в 2013 (с этого редактирования.) Умный программист C смог изменять код для их определенной цели.
Альтернативные 2 источника: