psutil модуль даёт неправильные сведения о подкачке
psutil 5.8.0
Нужно на питоне определить, сколько подкачки (swap) занято в системе.
Параметры: ОЗУ 8ГБ, 2ГБ подкачки на диске C, 1 ГБ подкачки на F
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import psutil
>>> psutil.swap_memory()
sswap(total=11598950400, used=9961512960, free=1637437440, percent=85.9, sin=0, sout=0)
>>> psutil.virtual_memory()
svmem(total=8379674624, available=3980820480, percent=52.5, used=4398854144, free=3980820480)
>>>
Тогда почему psutil.swap_memory() возвращает в total 11 ГБ? Такое ощущение, что это сумма ОЗУ+подкачка. Как тогда получить данные только по подкачке?
Ответы (3 шт):
Можно получить эту информацию из pagefile.sys через WMI (Win management instrumentation).
import wmi
c = wmi.WMI()
for pf in c.Win32_PageFileUsage():
print(f"{pf.Name} — total: {pf.AllocatedBaseSize} mb, used: {pf.CurrentUsage} mb")
Подробнее о WMI в python: https://pypi.org/project/WMI/
У меня такая конфигурация: файл подкачки при ОЗУ 8 Гб имеет размер 16 Гб и не является динамическим. Второе: по состоянию на ноябрь 2025 года современная версия Питона это 3.14.0. Третье: актуальная версия psutil это 7.1.3. Четвёртое: современная версия Windows это 10.26200.7019. В такой среде результат работы этого скрипта:
import os
import psutil
vm = psutil.virtual_memory()
swap = psutil.swap_memory()
print("Объект виртуальной памяти:", vm)
print("Объект файла подкачки:", swap)
print("Размер файла подкачки:", swap.total, "байт")
print(f"Размер файла подкачки: {swap.total / (1024 * 1024):.2f} Мб")
os.system("pause")
выглядит так:
Объект виртуальной памяти: svmem(total=8358518784, available=3006144512, percent=64.0, used=5352374272, free=3006144512)
Объект файла подкачки: sswap(total=17179869184, used=855822336, free=16324046848, percent=5.0, sin=0, sout=0)
Размер файла подкачки: 17179869184 байт
Размер файла подкачки: 16384.00 Мб
Никаких чудес. Что указал я в настройках (16 Гб), то и psutil мне выдал (16384.00 MB).
Вот результат для двух файлов подкачки 16 и 8 Гб (я добавил второй для эксперимента):
Объект виртуальной памяти: svmem(total=8358518784, available=2805936128, percent=66.4, used=5552582656, free=2805936128)
Объект файла подкачки: sswap(total=25769803776, used=948768768, free=24821035008, percent=3.7, sin=0, sout=0)
Размер файла подкачки: 25769803776 байт
Размер файла подкачки: 24576.00 Мб
Ничего опять "чудесного".
Эта проблема psutil версии 5.8.0 опубликована на GitHub, см. Issue #1921: [Windows] psutil.swap_memory() shows committed memory instead of swap:
On MS Windows,
psutil.swap_memory()shows committed memory (physical memory + pagefile/swap). On FreeBSD, it shows swap only as it should be. I believe on Windows it should show swap-only numbers too.
Её пофиксили в версии 5.9.0, см. файл release-5.9.0/HISTORY.rst:
- 1921, [Windows]: swap_memory() shows committed memory instead of swap.
Ссылка на pull-request, где можно увидеть изменения:
Решением может быть небольшой апгрейд psutil (обновление к последним версиям работает не всегда, потому что Python не ограничен требованием обратной совместимости и может возникнуть конфликт с параллельно установленными библиотеками, см. пример):
path-to-used-python -m pip install --force-reinstall "psutil==5.9.0"

