首页 > 解决方案 > 在 Python 中检测内存交换

问题描述

如何检测操作系统何时开始将正在运行的进程的某些资源交换到磁盘?

我从基本相同的问题来到这里。该psutil库显然很棒并且提供了很多信息,但是我不知道如何使用它来解决问题。

我创建了一个简单的测试脚本。

import psutil
import os
import numpy as np

MAX = 45000

ar = []
pr_mem = []
swap_mem = []
virt_mem = []

process = psutil.Process()

for i in range(MAX):
    ar.append(np.zeros(100_000))
    pr_mem.append(process.memory_info())
    swap_mem.append(psutil.swap_memory())
    virt_mem.append(psutil.virtual_memory())

然后,我绘制了这些统计数据的过程。

import matplotlib.pyplot as plt

plt.figure(figsize=(16,12))

plt.plot([x.rss for x in pr_mem], label='Resident Set Size')
plt.plot([x.vms for x in pr_mem], label='Virtual Memory Size')
plt.plot([x.available for x in virt_mem], label='Available Memory')
plt.plot([x.total for x in swap_mem], label='Total Swap Memory')
plt.plot([x.used for x in swap_mem], label='Used Swap Memory')
plt.plot([x.free for x in swap_mem], label='Free Swap Memory')

plt.legend(loc='best')
plt.show()

结果图

我看不到如何使用有关交换内存的信息来检测进程的交换。

所以问题是成立的。如何检测操作系统何时开始将正在运行的进程的某些资源交换到磁盘?

我在 Windows 上工作,但解决方案需要跨平台(或至少尽可能跨平台)。

欢迎任何建议、建议或有用的链接。谢谢!


对于上下文,我编写了一个需要管理其内存消耗的库。我相信,通过了解程序逻辑,我的手动交换(将数据序列化到磁盘)可以比操作系统交换更好(更快)。更重要的是,它限制了操作系统交换空间,因此,有时需要进行不使用操作系统交换空间的手动交换。

为了在正确的时间开始手动交换,了解操作系统交换何时开始至关重要。

标签: pythonmemorypsutil

解决方案


推荐阅读