我正在使用poolmon查找内存池泄漏。在知识库文章,他们解释了如何使用剪切和粘贴手动捕获输出。有没有办法自动完成这个?
由于该工具似乎不支持,我的想法是运行两个命令提示符(一个用于分页池,一个用于非分页池),并使用工具自动截取屏幕截图。如果可以的话,您会建议使用哪种工具?是否有一种工具可以在无需人工干预的情况下从命令提示符中截取文本?
答案1
在版本 5.2.3790.0(来自 W2K3 RTM 支持工具)中,您可以指定“快照”文件:
poolmon -n filename.log
它会将分页池和非分页池条目都写入此文件。
我将使用计划任务定期运行以下操作:
@echo off
SET POOLMON="C:\Program Files\Support Tools\Poolmon.exe"
SET OUTDIR=C:\WINDOWS\TEMP
SET YEAR=%DATE:~10,4%
SET MONTH=%DATE:~4,2%
SET DAY=%DATE:~7,2%
SET HOUR=%TIME:~0,2%
IF /I %HOUR% LEQ 9 SET HOUR=0%HOUR:~1,1%
SET MINUTE=%TIME:~3,2%
SET SECOND=%TIME:~6,2%
SET ISODATE=%YEAR%-%MONTH%-%DAY%_%HOUR%-%MINUTE%-%SECOND%
%POOLMON% -n %OUTDIR%\poolmon.%ISODATE%.log
将 POOLMON 设置为指向 Poolmon.exe 的路径,将 OUTDIR 设置为指向您想要输出写入的任何目录,您将获得以下格式的输出文件:
poolmon.YYYY-MM-DD_HH-MM-SS.log
将该脚本放入计划任务中即可开始工作。
答案2
Rem You need sleep.exe and poolmon to run.
echo off
C:
cd \
MD Poolmon-log
cd poolmon-log
explorer c:\poolmon-log
SET POOLMON="Poolmon.exe"
SET OUTDIR=C:\poolmon-log\
SET YEAR=%DATE:~8,4%
SET MONTH=%DATE:~3,2%
SET DAY=%DATE:~0,2%
SET HOUR=%TIME:~0,2%
IF /I %HOUR% LEQ 9 SET HOUR=0%HOUR:~1,1%
SET MINUTE=%TIME:~3,2%
SET SECOND=%TIME:~6,2%
SET ISODATE=%DAY%-%MONTH%-%Year%_%HOUR%-%MINUTE%-%SECOND%
:Top1
%POOLMON% /p /p /b -n %OUTDIR%poolmon-%ISODATE%.log
sleep 3600
goto top1
pause
以上操作在爱尔兰有效。Explorer 将自动打开文件夹以供查看。每 30 分钟转储一次日志。