Сообщить об ошибке.

Статистика использования RAM и SWAP, модуль psutil в Python

Статистика использования оперативной памяти ОС

Материал содержит описание функций модуля psutil с примерами, которые возвращают статистику об использовании системной RAM и SWAP памяти.

Содержание:


psutil.virtual_memory():

Функция psutil.virtual_memory() возвращает статистику об использовании системной памяти в виде именованного кортежа, включающего следующие поля, выраженные в байтах.

Основные показатели:

  • total: общая физическая память (без подкачки SWAP).
  • available: память, которую можно мгновенно отдать процессам без перехода системы в SWAP. Значение вычисляется путем суммирования различных значений памяти в зависимости от платформы, и предполагается, что оно будет использоваться для мониторинга фактического использования памяти кросс-платформенным способом.

Другие показатели:

  • used: используемая память, рассчитанная по-разному в зависимости от платформы и предназначена исключительно для информационных целей. Выражение total - free не обязательно соответствует used.
  • free: память, которая не используется вообще, которая легко доступна. Обратите внимание, что это не отражает фактическую доступную память (вместо этого показателя используйте available). Выражение total - used не обязательно совпадает с free.
  • active (UNIX): память, используемая в настоящее время или совсем недавно, данные в ней находится в оперативной памяти RAM.
  • inactive (UNIX): память, помеченная как неиспользуемая.
  • buffers (Linux, BSD): кэш для метаданных файловой системы.
  • cached (Linux, BSD): кэш для различных целей.
  • shared (Linux, BSD): память, к которой могут одновременно обращаться несколько процессов.
  • slab (Linux): кэш структур данных в ядре.
  • wired (BSD, macOS): память, которая помечена так, чтобы всегда оставаться в оперативной памяти RAM. Данные в ней никогда не перемещаются на диск.

Сумма использованного used и доступного available не обязательно равна сумме total. В Windows available и free одинаковы.

Обратите внимание, если просто нужно узнать, сколько физической памяти осталось в кросс-платформенном режиме, то просто используйте поле available (доступно).

>>> import psutil
>>> mem = psutil.virtual_memory()
>>> mem
# svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, 
# free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, 
# cached=3500347392, shared=787554304, slab=199348224)

>>> THRESHOLD = 100 * 1024 * 1024  # 100MB
>>> if mem.available <= THRESHOLD:
...     print("warning")

psutil.swap_memory():

Функция psutil.swap_memory() возвращает статистику памяти подкачки системы в виде именованного кортежа, включая следующие поля:

  • total: общая память подкачки в байтах;
  • used: используемая память подкачки в байтах;
  • free: свободная память подкачки в байтах;
  • percent: процент использования, рассчитанный как (total - available) / total * 100;
  • sin: количество байтов, которые система загрузила с диска (совокупное);
  • sout: количество байтов, которые система выгрузила с диска (совокупное).

Значения sin и sout в Windows всегда установлены в 0.

>>> import psutil
>>> psutil.swap_memory()
# sswap(total=2097147904L, used=886620160L, free=1210527744L, 
# percent=42.3, sin=1050411008, sout=1906720768)

Изменено в версии 5.2.3: в Linux эта функция полагается на /proc/fs/ вместо системного вызова sysinfo(), так что ее можно использовать совместно с psutil.PROCFS_PATH для получения информации о памяти контейнеров Linux, таких как Docker и Heroku.

Пример вывода статистики использования памяти сервера.

import psutil
from psutil._common import bytes2human

def pprint_ntuple(nt):
    for name in nt._fields:
        value = getattr(nt, name)
        if name != 'percent':
            value = bytes2human(value)
        print('%-10s : %7s' % (name.capitalize(), value))

def main():
    print('MEMORY\n------')
    pprint_ntuple(psutil.virtual_memory())
    print('\nSWAP\n----')
    pprint_ntuple(psutil.swap_memory())

if __name__ == '__main__':
    main()

Вывод сценария:

$ python3 test.py
MEMORY
------
Total      :    9.7G
Available  :    4.9G
Percent    :    49.0
Used       :    8.2G
Free       :    1.4G
Active     :    5.6G
Inactive   :    2.1G
Buffers    :  341.2M
Cached     :    3.2G
SWAP
----
Total      :      0B
Used       :      0B
Free       :      0B
Percent    :     0.0
Sin        :      0B
Sout       :      0B