Анализ несоответствия между кучей и памятью процесса в .NET - PullRequest
0 голосов
/ 21 мая 2019

Как видно на прикрепленном изображении, общий размер кучи составляет менее 9 МБ, но использование памяти процессом составляет почти 22 ГБ. Это периодически возникающая ошибка, которую я не могу надежно воспроизвести, поэтому я пытаюсь решить проблему. На что мне нужно обратить внимание, чтобы отследить это использование? Какие инструменты я могу использовать, чтобы найти, где используется эта память?

Это длительный процесс, и проблема появляется каждые несколько дней, поэтому я не могу реально использовать инструмент, который сильно замедляет процесс, поскольку мне, возможно, придется ждать недели, чтобы воспроизвести проблему.

В настоящее время я обнаруживаю проблему с помощью PrivateMemorySize64 и оповещаю себя по электронной почте. Мне интересно, есть ли какие-либо библиотеки .NET, которые я могу использовать для тщательного анализа использования памяти, когда возникает проблема, чтобы сузить проблему?

Memory Usage

Обновление - я использовал Debugdiag, чтобы сузить проблему, проблема, с которой я столкнулся сейчас, заключается в том, что я не уверен в том, на что смотрю.

Здесь это звучит плохо:

\clr.dll is responsible for 8.06 GBytes worth of outstanding allocations. The following are the top 2 memory consuming functions:

clr!EEHeapAllocInProcessHeap+46: 7.46 GBytes worth of outstanding allocations.
clr!CExecutionEngine::ClrVirtualAlloc+4f: 623.06 MBytes worth of outstanding allocations.

Глядя на функции по размеру выделения, неудивительно, что большая часть выделенной памяти вызвана выделением памяти.

clr!EEHeapAllocInProcessHeap+46  -  7.46 GBytes

Затем я просматриваю следы стека, чтобы попытаться выяснить, что происходит, но ни один из них не ссылается на какой-либо мой код, что, я думаю, не слишком удивительно, поскольку я предполагаю, что он не показывает управляемый код так куда мне идти отсюда?

Function details

Function   clr!EEHeapAllocInProcessHeap+46 
Source Line    
Allocation type   Heap allocation(s) 
Heap handle   0x00000000`00000000 
Allocation Count   1962310 allocation(s) 
Allocation Size   7.46 GBytes 
Leak Probability   12% 



Call stack sample 1

Address   0x00000000`00000000 
Allocation Time   00:05:42 since tracking started 
Allocation Size   1.2 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!ThreadStore::AllocateOSContext+20       
clr!ThreadSuspend::SuspendRuntime+1f2       
clr!ThreadSuspend::SuspendEE+128       
clr!WKS::GCHeap::GarbageCollectGeneration+b7       
clr!WKS::gc_heap::trigger_gc_for_alloc+2d       
clr!JIT_New+4d6       
0x7FFC776370A1       



Call stack sample 2

Address   0x00007ffc`d711d888 
Allocation Time   00:05:59 since tracking started 
Allocation Size   1.95 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!SetupUnstartedThread+20       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC7743DD30       



Call stack sample 3

Address   0x00000000`00000000 
Allocation Time   00:05:59 since tracking started 
Allocation Size   1.2 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!Thread::Thread+409       
clr!SetupUnstartedThread+32       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC7743DD30       



Call stack sample 4

Address   0x00000040`00000000 
Allocation Time   00:05:59 since tracking started 
Allocation Size   16 Bytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!Thread::Thread+472       
clr!SetupUnstartedThread+32       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC7743DD30       



Call stack sample 5

Address   0x00000000`00000000 
Allocation Time   00:05:59 since tracking started 
Allocation Size   520 Bytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!RCWStackHeader::RCWStackHeader+2b       
clr!Thread::Thread+487       
clr!SetupUnstartedThread+32       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC7743DD30       



Call stack sample 6

Address   0x00000000`00000000 
Allocation Time   00:05:59 since tracking started 
Allocation Size   24 Bytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!Thread::InitThread+d9       
clr!Thread::HasStarted+c1       
clr!ThreadNative::KickOffThread+a7       
clr!Thread::intermediateThreadProc+86       
kernel32!BaseThreadInitThunk+14       
ntdll!RtlUserThreadStart+21       



Call stack sample 7

Address   0x00007ffc`d711d888 
Allocation Time   00:05:59 since tracking started 
Allocation Size   1.95 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!SetupUnstartedThread+20       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC77447620       



Call stack sample 8

Address   0x00000000`00000000 
Allocation Time   00:05:59 since tracking started 
Allocation Size   520 Bytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!RCWStackHeader::RCWStackHeader+2b       
clr!Thread::Thread+487       
clr!SetupUnstartedThread+32       
clr!ThreadNative::SetStart+c4       
mscorlib_ni!System.Threading.Thread.SetStartHelper(System.Delegate, Int32)$##6003C20+138       
0x7FFC77447620       



Call stack sample 9

Address   0x00000231`fc8b24d0 
Allocation Time   00:25:29 since tracking started 
Allocation Size   3.99 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!SyncBlockCache::GetNextFreeSyncBlock+6f       
clr!ObjHeader::GetSyncBlock+6b       
clr!JITutil_MonEnterWorker+da       
0x7FFC7763317D       



Call stack sample 10

Address   0x00000231`fc8ab460 
Allocation Time   00:26:50 since tracking started 
Allocation Size   3.99 KBytes 


LeakTrack+1f109       
clr!EEHeapAllocInProcessHeap+46       
clr!operator new+24       
clr!SyncBlockCache::GetNextFreeSyncBlock+6f       
clr!ObjHeader::GetSyncBlock+6b       
clr!JITutil_MonEnterWorker+da       
0x7FFC7763317D 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...