Общий способ контролировать ВСЕ использования памяти

У меня есть 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 имеет больше для предложения, чем это.

5
задан 13 April 2017 в 05:37

1 ответ

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

Существует также список внизу страницы подобных пакетов.

Источники:

Альтернативный 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 источника:

6
ответ дан 23 November 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: