我正在寻找一种工具来跟踪 GDI 使用情况,以便在接近最大值时可以收到警报。这是在 Windows XP SP3 上。
作为背景,以下是一些不太符合要求的相关页面/应用程序:
有一个关于此问题的帖子http://forum.sysinternals.com/topic13580.html,但没有真正的答案。
熊上面文章中提到的确实做了总计,但它基于 GUI,更重要的是它似乎使用了很多 CPU。
使用情况监控表面上看起来很有希望,但只对个别过程设置限制,而不是对总体设置限制。
答案1
有一个名为GDI视图。该工具可以转储到文本文件或 CSV。它具有每个进程的统计数据,因此您必须处理输出(powershell 可以处理这个),然后在总数超出限制时发出警报。
答案2
请参阅 @uSlackr 的答案,了解正确答案 GDIView 及其链接。我添加了第二个答案,以分享我编写的 Cygwin bash 脚本,用于跟踪总数并在超过一定数量时发出警报,以防对其他人有帮助。
此脚本每 INTERNAL(默认 120)秒回显时间和 GDI 总数。如果 GDI 总数超过 GDILIMIT(默认 10000),它会弹出一个消息框,还会回显前 15 个 GDI 用户,以便您查看谁在占用。谢谢 @uSlackr!
#! /bin/bash
INTERVAL=120
GDILIMIT=10000
for (( ; ; ))
do
/c/apps/gdiview/GDIView.exe /stab `cygpath -w $TMP/gdiview.txt`
gdi=`awk '{ SUM += $3} END { print SUM }' < $TMP/gdiview.txt`
echo -e `date +%H:%M` $gdi "\033]2;$(basename $0) $gdi\007"
if [ "$gdi" -gt "$GDILIMIT" ]
then
head -15 $TMP/gdiview.txt
msg $USER "GDI is $gdi"
fi
sleep $INTERVAL
done