首页 / 宜忌说明

夜里十一点排查卡顿,先看资源监视器哪一栏

夜里十一点排查卡顿,先看资源监视器哪一栏

夜里十一点,夜里源监同事发来消息说导出报表的点排顿先机器“卡死了”,第二天早上八点要交。看资我远程连上去,视器任务管理器里 CPU 只有 20% 多,夜里源监看起来一切正常。点排顿先我下意识地判定是看资软件本身的问题,让他重启程序。视器二十分钟后他回来说还是夜里源监一样。那一刻我才反应过来:我根本没打开资源监视器,点排顿先只是看资用任务管理器的总览做了结论。后来复盘,视器这个失手的夜里源监关键不在于工具用得对不对,而在于我把“总占用不高”直接等同于“没有瓶颈”。点排顿先

第一反应:先看磁盘队列长度,看资而不是总占用百分比

资源监视器的“磁盘”标签里有一列叫“队列长度”,它表示有多少个读写请求在排队等磁盘响应。总占用率低,但队列长度长期大于 2,说明磁盘在疲于应付零碎的小读写,程序体感就是卡。那天的情况正是如此:报表程序一边读模板一边写临时文件,占用率只有百分之十几,队列长度却一直在 4 到 6 之间跳。任务管理器只给一个百分比,看不到这个排队现象。所以资源监视器出问题先查什么,我现在的顺序是:磁盘队列长度优先于 CPU 总占用。如果队列长度持续偏高,再看“响应时间”那一列,单位是毫秒,数值明显变大就说明磁盘确实在拖后腿。

第二步:把“提交大小”和“工作集”分开读

确认磁盘不是唯一嫌疑后,我切到“内存”标签。这里容易犯的错是只看物理内存使用率。资源监视器给出两个不同的数:工作集是进程实际占用的物理内存,提交大小是它向系统申请的总量,包含可能被换到页面文件的部​​分。那天报表进程的工作集只有 800MB 左右,提交大小却接近 3GB。这意味着它申请了大量内存,系统只能把一部分挪到页面文件,一访问就触发磁盘读写,于是又回到上一步的队列问题。判断标准很简单:提交大小远大于工作集,且磁盘读写同时活跃,就要怀疑内存压力,而不是继续盯着 CPU。这里不要急着加内存条,先看是不是程序一次性加载了整张表。

第三步:用“关联的句柄”找被占用的文件,而不是猜

还有一个细节当时被我忽略了。同事说导出目录里的旧文件删不掉,提示“正被另一程序使用”。资源监视器的 CPU 标签下有个“关联的句柄”搜索框,输入文件名或目录名,能列出是哪个进程握着这个句柄。我输入导出目录名,发现是上一轮没退干净的报表进程还挂着,它既占着文件,又在后台做定时写入。这一步的价值在于把“感觉有东西在跑”变成“具体是哪个进程、哪个 PID”。找到之后结束该进程,队列长度几分钟内就回落了。要注意,结束进程前先确认它不是在写关键数据,否则可能损坏文件;不确定就保存现场再操作。

事后回看:那次失手漏掉的核对动作

整件事的教训不是资源监视器比任务管理器强,而是我跳过了交叉核对。现在的习惯是:打开资源监视器后,先在“概述”里扫一眼四个横条的相对高低,再进对应标签看具体列,最后用句柄搜索验证怀疑对象。三步都走完再下结论。如果当时在第一步就看磁盘队列,后面二十分钟的重启根本不需要。另外提醒一句,资源监视器的数据是实时刷新的,截图给别人看时最好连同时间点一起说明,否则对方看到的数值和你看到的可能不是同一时刻。真遇到系统级异常、怀疑驱动或硬件问题,资源监视器只能提供线索,该查系统日志或找运维就去找,别在一个界面里耗到天亮。

作者:干支纪年