使用 Poolmon 在 Windows 非分页内存中查找内存泄漏。使用步骤
在本文中,我们将帮助您在 Windows 环境中使用 Poolmon 识别和查找内存泄漏。
在您的 Windows 生态系统中可能面临的许多问题中,可能需要注意的一个紧迫问题是内存泄漏问题。内存泄漏可以有多种类型。您可能遇到的一个标准错误包括内核级内存泄漏问题。你会如何解决它?我们将在今天的教程中指导您完成整个过程。
什么是内存泄漏?
正常情况下,进程从分页池或非分页池中分配内存。但是,它有时可能无法释放内存。当新进程分配内存时,分配给先前进程的旧内存不会释放回操作系统。
这会导致池的有限内存随着时间的推移而耗尽。结果,您的系统开始变慢。当池中的内存完全耗尽时,会导致系统完全故障。查找内存泄漏并解决它所涉及的过程必然需要内存泄漏的确切根本原因并解决它。
理想情况下,内存泄漏可能以两种方式发生:内核模式内存泄漏和用户模式内存泄漏。根据问题的原因,可以采用多种方法来解决内存泄漏问题。
如果您怀疑设备中存在内核模式内存泄漏,解决该问题的最佳选择是使用普尔蒙。Poolmon 是一个实用程序,可通过标记名称跟踪池的内存使用情况。
Poolmon 包含在 Windows 驱动程序工具包中,通常称为 WDK。以下是如何使用 Poolmon 解决内核模式内存泄漏问题。
您可以按照以下步骤通过 Poolmon 识别内核模式中的内存泄漏。
启用 Poolmon 实用程序
如果您使用的是 Windows XP 或 Windows 2000,则需要启用它。如果您使用的是更高版本的 Windows,您会发现它已默认启用。
以下是在 Windows XP 和 Windows 200 上启用 Poolmon 的方法 –
- 您需要先使用 GFlags 来启用 Poolmon。
- 您可以找到 GFlags 包含在D适用于 Windows 的调试工具。
- 发射
- 前往系统注册表
- 选中该框启用池标记
- 完成所有这些设置后,单击
重新启动计算机以使您所做的所有更改生效。
使用Poolmon查找内存泄漏
Poolmon 在其标头中显示分页和非分页池字节。该信息每隔几秒更新一次。
按照此处的步骤查找系统中的内存泄漏 -
- 启动 Poolmon
- 确保您了解系统中确切的内存泄漏问题。如果您确定非分页池中发生内存泄漏,请按一次 P。如果您确信内存泄漏是由分页池引起的,请按 P 两次。如果您不确定,无需按 P 键即可退出应用程序。这将包括所有池。
- 现在,按 B。这将按照正在使用的最大字节的顺序显示字节
- 截图并保存。最好用时间标签命名,以便于跟踪。
- 继续每半小时截图一次。
- 比较一下截图。这将使您了解导致较高内存使用量的标签。
停止测试并在一段时间后再次重复测试。检查释放了多少内存。理想情况下,应用程序应该几乎以恒定的速率分配和释放内存。如果您发现应用程序分配内存的速度比释放内存的速度快,则表明存在内存泄漏。
Poolmon 命令
如果您正在使用 Poolmon,您应该了解一些命令,以便您可以正确地使用它。以下是 Poolmon 使用的命令列表。
| 命令 | 它的作用 |
| 磷 | 按分页、非分页和混合类型对标签列表进行排序。重复按 P 可循环选择选项 |
| 乙 | 根据最大字节使用量对标签列表进行排序 |
| 中号 | 根据最大字节分配对标签列表进行排序 |
| 时间 | 根据标签名称按字母顺序对标签列表进行排序 |
| 乙 | 在底部显示分页、非分页和总标签。使用该命令循环选择选项。 |
| 一个 | 根据分配大小对标签进行排序 |
| F | 根据类型自由操作对标签进行排序 |
| S | 根据分配和释放内存之间的差异对标签列表进行排序 |
| 问 | 退出普尔蒙 |
如何解决泄漏问题?
请注意,Poolmon 只是一个监控实用程序。它将监视池标签以及它们处理的内存使用情况。因此,您可以使用它们来指导哪些标签正在使用大量内存并因此导致内存泄漏。它不能用来解决内存泄漏问题。
一旦确定了与内存泄漏相关的标签,您就可以使用其他工具来确定确切的原因来识别内存泄漏的实例。内核调试器可能是在这方面有帮助的工具之一。然而,解释这些工具超出了本文的范围。然而,如果您面临内存泄漏问题并试图解决它,Poolmon 可能是您的最佳选择。
离别的思念
Poolmon 确实是在内核级别识别设备内存泄漏问题的绝佳选择。内存泄漏问题会严重降低系统的性能,因此需要及时解决。我们假设我们已经能够指导您以正确的方式使用 Poolmon 来识别 Windows 系统上内存泄漏的发生。一旦发现泄漏的存在以及导致泄漏的标签,就应该很容易通过其他方式找到解决方案。
