تكرار السؤال: …
الإجابة المختصرة
تجمع ملف تفريغ الذاكرة (Memory Dump) بـ dotnet-dump دون إيقاف السيرفر، وتحلله بأوامر SOS مثل dumpheap -stat لتحديد تسريبات الكائنات وأقفال الخيوط.
الشرح
في بيئات الحاويات وLinux السحابية، لا يمكنك تشغيل Visual Studio المباشر. توفر مايكروسوفت أدوات تشخيص عالمية عبر مقبس EventPipe. باستخدام dotnet-dump collect -p <pid>، يتم التقاط لقطة ذاكرة كاملة للحاوية، ثم استخدام dotnet-dump analyze لفحص كائنات الـ Managed Heap، ومعرفة الخيوط العالقة في sync-blocks، ومسارات الجذور المسببة للـ Memory Leaks بدقة.
مثال بالكود
dotnet tool install -g dotnet-dump
dotnet tool install -g dotnet-trace
dotnet-dump collect -p 1234 -o /tmp/app.dmp # does not stop the process
dotnet-dump analyze /tmp/app.dmp
> dumpheap -stat # which types dominate the heap? (memory leak)
> clrstack -all # every thread's stack: look for threads waiting on the same lock
> syncblk # which thread owns which monitor lock (deadlock)
dotnet-trace collect -p 1234 --duration 00:00:30 # CPU/event trace to open in PerfView or Speedscopeأخطاء شائعة
- أخذ ملفات تفريغ ذاكرة كاملة (Full Dumps) في سيرفرات تمتلك مساحات رام هائلة ومساحة قرص محدودة مما يملأ القرص.