win内存使用率过高但是资源监视器查看不到进程,排查思路

小丫2年前技术文章10774

问题现象:

服务器:某云服务器 内存使用率持续打高,但是通过任务管理器查不到占用内存很高的进程

排查步骤:

1、通过任务管理器分析

核查目标主机的内存使用趋势情况,近7天内存使用情况如下:

image.png


通过任务管理器排查内存使用情况:

image.png


进一步核查进程使用内存情况,发现并没有占用内存很高的进程。

image.png


  • 提交:操作系统为进程保留的虚拟内存,是程序独占的内存(包含物理内存和在页面文件中的内存)(单位:KB)

  • 工作集:进程当前正在使用的物理内存量(单位:KB)

  • 可共享:进程所使用的可与其它进程共享的物理内存量(单位:KB)

  • 专用:由该进程所使用而其它进程无法使用的物理内存量(单位:KB)

    工作集=可共享+专用

从进程内存详细输出结果来看,所有进程内存使用率总和并不会达到那么高的水位线。所以从单纯使用该工具无法进行下一步分析。

2、通过RAMMap分析

RAMMap工具较任务管理器可以看到更详细的内存信息。首先下载该工具,工具下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/rammap

下载完成之后,直接启动执行文件,可以看到如下内存分析结果:

image.png



其中,Nonpaged Pool(未分页池)占用内存过多,约5G左右。具体这块内存是哪部分使用掉的呢?该工具是无法核查到的,所以需要其他工具进一步核查。

3、通过Poolmon分析

继续上面的排查,想要知道Nonpaged Pool(未分页池)具体是哪个程序占用的,需要借助Poolmon工具分析。

Poolmon 是 wdk(windows develop kits) 里的工具,所以需要先安装 wdk, 但是wdk又依赖于Visual Studio,所以安装顺序为:1)安装Visual Studio--> 2)安装WDK--> 3)安装启动Poolmon

所有资源下载地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

版本兼容性说明,可参考如下信息:

image.png

本次目标服务器操作系统版本为:windows server 2012

1)安装Visual Studio

参考上面给的资源下载链接,下载社区版安装包(下载的时候, 建议准备 10G 磁盘)

image.png


具体安装过程截图,这里就不再一一展示。其中,安装的时候注意必须勾选: “通用 Windows 平台开发”以及左侧“win11 sdk”,安装路径支持自定义。

安装完成之后,默认启动该工具即可。

2)安装WDK

参考上面给的资源下载链接,下载安装包

image.png


改工具安装过程无需特别注意项,直接一步步安装完成即可。

3)安装启动PoolMon工具

WDK安装完成之后,可以在默认路径:下,找到PoolMon工具。

image.png


执行x64目录下的poolmon工具即可。双击执行,可以看到如下界面:

默认列出了nonpage以及page相关信息。按大写字母“P”,可以只列出nonpage相关信息,然后再按大写字母“B”,按照内存大小倒序排序。

image.png

从排序结果可以看到,主要是Tag为:Mloc 占用内存较大。

打开cmd窗口,进入c:/windows/system32/drivers,然后输入命令:

findstr /m /l Mloc *.sys

命令执行结果为:

eamonm.sys edevmon.sys ehdrv.sys epfw.sys epfwwfp.sys

定位到具体的驱动文件之后,进一步核查驱动信息,定位到具体是哪个程序

image.pngimage.pngimage.pngimage.pngimage.pngimage.png


从以上五个截图可以详细看到,这几个驱动文件对应的程序为:ESET Security软件。

核查服务器上运行的程序,确认确实有启动该程序。


最终判断,是由于该程序导致nonpaged pool占用内存较大,从而导致服务器整体内存使用率较高。

建议解决方案:

1、建议尝试修改该安全软件配置,例如:关闭文件扫描。观察内存是否有回落。

2、如修改配置后内存使用率仍无明显改善,建议将ESET Security软件停止/卸载,观察内存是否有回落。


相关文章

MySQL 官方高可用方案:Innodb ReplicaSet

MySQL 官方高可用方案:Innodb ReplicaSet

说明MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品,用来帮助用户快速部署和管理主从复制,在数据库层仍然使用的是主从复制技术。ReplicaSet 主...

ubuntu安装mysql

执行sudo apt install mysql-server启动mysqlsudo systemctl start mysql查看状态sudo systemctl status mysql查看默认密...

MySQL运维实战之ProxySQL(9.10)proxysql监控

MySQL运维实战之ProxySQL(9.10)proxysql监控

stats数据库从stats数据库中可以查到proxysql一些内部组件的状态,如内存使用情况、连接池信息、会话信息、SQL执行状态等。mysql> show tables&...

Kafak顺序写入与数据读取详解

Kafak顺序写入与数据读取详解

生产者(producer)是负责向Kafka提交数据的,Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafak采用了两个技术,顺序写入和MMFile。1. 顺序写入因为...

MySQL运维实战之ProxySQL(9.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

Trino资源组配置

Trino资源组配置

1 概述Presto作为一个大数据场景下的交互式查询引擎,当使用达到一定规模,就会更多考虑资源分配问题,即保障重要任务优先获取资源。Presto资源组: Presto的资源组机制,是从资源分配的角度...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。