Статистика использования оперативной памяти ОС.
Содержание:
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