Материал содержит описание функций модуля psutil
с примерами, которые возвращают статистику об использовании системной RAM и SWAP памяти.
psutil.virtual_memory()
статистика об использовании системной памяти RAM,psutil.swap_memory()
статистика об использовании 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
. В Windowsavailable
и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