Maneira da linha de comando para obter o total de gld handles (ou gdi handles free)

1

Estou procurando uma ferramenta para rastrear o uso do GDI, para que eu possa receber alertas quando estiver próximo ao máximo. Isso está no Windows XP SP3.

Como pano de fundo, aqui estão algumas páginas / aplicativos relacionados que não se encaixam bem na fatura:

Há uma discussão sobre isso no link , mas não há uma resposta real.

bear que é mencionado no artigo acima faz totais, mas é baseado em GUI e mais importante é parece usar muita CPU.

O

Monitor de Uso parece promissor na superfície, mas apenas estabelece limites em processos individuais, e não no total .

Estes não têm totais GDI:
* Process Explorer
* System Explorer

Estes não têm GDI:
* PsTools
* Process Viewer
lista de tarefas * Gerenciador de Tarefas

    
por studgeek 29.08.2011 / 17:19

2 respostas

4

Existe uma ferramenta de linha de comando / GUI chamada GDIView . A ferramenta pode descarregar para um arquivo de texto ou CSV. Ele tem estatísticas por processo, portanto, você teria que processar a saída (o PowerShell poderia lidar com isso) e, em seguida, alertar se o total exceder seus limites.

    
por 29.08.2011 / 17:56
2

Por favor, veja a resposta do @slackr para a resposta correta GDIView e seu link. Estou adicionando uma segunda resposta para compartilhar o script bash Cygwin que eu escrevi em torno dele para rastrear totais e gerar alertas quando ultrapassar uma determinada quantia, caso seja útil para outras pessoas.
Este script ecoa o tempo e GDI total de cada INTERNO (padrão 120) segundos. Se o total de GDIs estiver acima de GDILIMIT (padrão 10000), ele gerará uma caixa de mensagem e também exibirá os 15 principais usuários do GDI para que você possa ver quem está sobrecarregando. Obrigado @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 "3]2;$(basename $0) $gdi
#! /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 "3]2;$(basename $0) $gdi%pre%7"
if [ "$gdi" -gt "$GDILIMIT" ] 
then
  head -15 $TMP/gdiview.txt
  msg $USER "GDI is $gdi"
fi
sleep $INTERVAL
done
7" if [ "$gdi" -gt "$GDILIMIT" ] then head -15 $TMP/gdiview.txt msg $USER "GDI is $gdi" fi sleep $INTERVAL done
    
por 31.08.2011 / 21:16