Como eu vejo o que é alocado na minha memória de pool paginável?

1

Aqui está um exemplo de saída do comando !vm no depurador do kernel do windbg.exe:

*** Virtual Memory Usage ***
Physical Memory:      259676 (   1038704 Kb)
Page File: \??\C:\pagefile.sys
  Current:   1558056 Kb  Free Space:   1206384 Kb
  Minimum:   1558056 Kb  Maximum:      3116112 Kb
Available Pages:       92541 (    370164 Kb)
ResAvail Pages:       174950 (    699800 Kb)
Locked IO Pages:          56 (       224 Kb)
Free System PTEs:     187264 (    749056 Kb)

******* 177 system cache map requests have failed ******

Free NP PTEs:          32457 (    129828 Kb)
Free Special NP:           0 (         0 Kb)
Modified Pages:        18154 (     72616 Kb)
Modified PF Pages:     18154 (     72616 Kb)
NonPagedPool Usage:     7704 (     30816 Kb)
NonPagedPool Max:      52532 (    210128 Kb)
PagedPool 0 Usage:      8386 (     33544 Kb)
PagedPool 1 Usage:      8000 (     32000 Kb)
PagedPool 2 Usage:      7980 (     31920 Kb)
PagedPool 3 Usage:      7984 (     31936 Kb)
PagedPool 4 Usage:      7975 (     31900 Kb)
********** Excessive Paged Pool Usage *****
PagedPool Usage:       40325 (    161300 Kb)
PagedPool Maximum:     40960 (    163840 Kb)

********** 5645 pool allocations have failed **********

Session Commit:         1228 (      4912 Kb)
Shared Commit:          6680 (     26720 Kb)
Special Pool:              0 (         0 Kb)
Shared Process:         4715 (     18860 Kb)
PagedPool Commit:      40325 (    161300 Kb)
Driver Commit:          4743 (     18972 Kb)
Committed pages:      217663 (    870652 Kb)
Commit limit:         624349 (   2497396 Kb)

Total Private:        145036 (    580144 Kb)

Observe que a memória do pool paginável é quase totalmente alocada e muitas alocações de pool falharam. Mas como descobrir o que está alocando? Eu suspeito de um vazamento de memória em algum lugar.

Quando o limite é atingido, recebo um comportamento de programa estranho e erros 0xC0000044 / 0xC000012D em todo o lugar.

    
por Dennis Williamson 12.09.2009 / 02:19

1 resposta

1

Use o Poolmon.exe para localizar o ofender. Se for um processo simples, você pode vê-lo no gerenciador de tarefas.

    
por 12.09.2009 / 15:06