{"id":4072,"date":"2022-07-21T20:44:00","date_gmt":"2022-07-21T18:44:00","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=4072"},"modified":"2022-07-22T11:08:27","modified_gmt":"2022-07-22T09:08:27","slug":"getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/","title":{"rendered":".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&#038;Linux Containers) \u0130\u00e7erisinden Memory Dump&#8217;lar\u0131n\u0131 Almak"},"content":{"rendered":"<p><\/p>\r\n<p>Bildi\u011fimiz gibi memory leak&#8217;lerden veya bilinmeyen sebeplerden dolay\u0131 <strong>crash<\/strong> veya <strong>hang<\/strong> olan uygulamalar\u0131m\u0131z\u0131 debug edebilmenin en iyi yolu, <strong>dump<\/strong> dosyalar\u0131n\u0131 incelemekten ge\u00e7mektedir. En az\u0131ndan benim tecr\u00fcbelerim genelde bu y\u00f6nde oldu.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Bizler ise developer&#8217;lar olarak, en az\u0131ndan uygulamalar\u0131m\u0131z\u0131n neden beklenmedik \u015fekilde davrand\u0131klar\u0131n\u0131 anlayabilecek kadar dump analizlerini yapabiliyor olmam\u0131z gerekmektedir.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Daha \u00f6nce benzer konular \u00fczerinde farkl\u0131 makaleler yazm\u0131\u015f ve sunumlar ger\u00e7ekle\u015ftirmi\u015ftim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/gokhan-gokalp.com\/dotnetkonf-etkinligi-debugging-and-profiling-net-core-applications-on-linux\/\" target=\"_blank\" rel=\"noopener\">dotnetKonf Etkinli\u011fi \u2013 Debugging and Profiling .NET Core Applications on Linux<\/a><\/li>\r\n<li><a href=\"https:\/\/gokhan-gokalp.com\/overview-of-debugging-and-profiling-net-core-applications-on-linux-1-perf-lttng\/\" target=\"_blank\" rel=\"noopener\">.NET Core Uygulamalar\u0131n\u0131n Linux \u00dczerinde Debugging &amp; Profiling \u0130\u015flemlerine Genel Bak\u0131\u015f \u2013 1 (Perf, LTTNg)<\/a><\/li>\r\n<li><a href=\"https:\/\/gokhan-gokalp.com\/windbg-ile-dump-analizi-yaparak-performans-sorunlarini-cozumleme\/\" target=\"_blank\" rel=\"noopener\">WinDBG ile Dump Analizi Yaparak Performans Sorunlar\u0131n\u0131 \u00c7\u00f6z\u00fcmleme<\/a><\/li>\r\n<\/ul>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Bu makale kapsam\u0131nda ise <strong>kubernetes<\/strong> ortam\u0131nda \u00e7al\u0131\u015fan hem <strong>windows-based<\/strong> hem de <strong>linux-based<\/strong> container&#8217;lar\u0131m\u0131zdan nas\u0131l <strong>dump<\/strong> alabilece\u011fimizi ve en basit \u015fekilde <em>windows<\/em> \u00fczerinde nas\u0131l analiz edebilece\u011fimizi g\u00f6stermeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">Senaryo<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<p><em>Azure Kubernetes Service<\/em>&#8216;i \u00fczerine deploy etti\u011fimiz bir uygulaman\u0131n, bir s\u00fcre sonra <strong>memory leak<\/strong> sebebi ile crash oldu\u011funu varsayal\u0131m. Bu memory leak&#8217;in nereden kaynakland\u0131\u011f\u0131n\u0131 h\u0131zl\u0131 bir \u015fekilde ara\u015ft\u0131rabilmek i\u00e7in ise, ilgili uygulaman\u0131n memory dump&#8217;\u0131n\u0131 incelemeye karar verdi\u011fimizi d\u00fc\u015f\u00fcnelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Bu senaryonun d\u0131\u015f\u0131nda uygulamalar\u0131m\u0131z belirli bir zaman sonra <strong>hang<\/strong> oluyor veya bilinmedik problemlerden dolay\u0131 <strong>deadlock&#8217;lar<\/strong>, <strong>exception&#8217;lar<\/strong> \u00fcretip <strong>crash<\/strong> de oluyor olabilir. Bunlar gibi \u00e7e\u015fitli problemleri adresleyebilmek i\u00e7in uygulamalar\u0131n o anki memory dump&#8217;lar\u0131n\u0131 alarak, kolay bir \u015fekilde bilgi sahibi olabiliriz<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ben h\u0131zl\u0131 bir \u00f6rnek ger\u00e7ekle\u015ftirebilmek ad\u0131na a\u015fa\u011f\u0131daki gibi memory \u00fczerinde allocation ger\u00e7ekle\u015ftirecek basit bir kod blo\u011fu haz\u0131rlad\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading;\r\n\r\nnamespace MemoryLeakNETFramework\r\n{\r\n\tclass Program\r\n\t{\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"App started.\");\r\n\r\n\t\t\tvar productService = new ProductService();\r\n\t\t\tproductService.GetProducts();\r\n\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tThread.Sleep(TimeSpan.FromMinutes(1));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclass ProductDTO\r\n\t{\r\n\t\tpublic int Id { get; set; }\r\n\t\tpublic byte[] XParameter { get; set; }\r\n\t}\r\n\r\n\tstatic class ProductUtil\r\n\t{\r\n\t\tpublic static byte[] CalculateSomething()\r\n\t\t{\r\n\t\t\tbyte[] buffer = new byte[1024];\r\n\t\t\treturn buffer;\r\n\t\t}\r\n\t}\r\n\r\n\tclass ProductService\r\n\t{\r\n\t\tpublic List GetProducts()\r\n\t\t{\r\n\t\t\tList&lt;ProductDTO&gt; products = new List&lt;ProductDTO&gt;();\r\n\r\n\t\t\tfor (int i = 0; i &lt; 500000; i++)\r\n\t\t\t{\r\n\t\t\t\tvar product = new ProductDTO()\r\n\t\t\t\t{\r\n\t\t\t\t\tId = i,\r\n\t\t\t\t\tXParameter = ProductUtil.CalculateSomething()\r\n\t\t\t\t};\r\n\r\n\t\t\t\tproducts.Add(product);\r\n\t\t\t}\r\n\r\n\t\t\treturn products;\r\n\t\t}\r\n\t}\r\n}<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi \u00fcr\u00fcn listesinin &#8220;<em>ProductDTO<\/em>&#8221; class&#8217;\u0131na mapping i\u015flemi s\u0131ras\u0131nda bir allocation i\u015flemi ger\u00e7ekle\u015ftiriyorum.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ger\u00e7ek d\u00fcnyada ise a\u015fa\u011f\u0131daki gibi \u00e7e\u015fitli sebeplerden dolay\u0131 memory leak problemleri ile kar\u015f\u0131la\u015fabilmemiz m\u00fcmk\u00fcnd\u00fcr.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<ul class=\"wp-block-list\">\r\n<li>Dispose edilmeyen unmanaged resource&#8217;lar<\/li>\r\n<li>In-memory caching<\/li>\r\n<li>Yanl\u0131\u015f thread kullan\u0131mlar\u0131<\/li>\r\n<li>Closure allocation&#8217;lar\u0131<\/li>\r\n<li>Yanl\u0131\u015f static durumlar\u0131<\/li>\r\n<\/ul>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">Windows Container ile Dump Almaya Ba\u015flayal\u0131m<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u0130lk olarak <em>windows-based <\/em>bir container i\u00e7erisinde \u00e7al\u0131\u015fan uygulamam\u0131z\u0131n, memory dump&#8217;\u0131n\u0131 nas\u0131l alabilece\u011fimiz konusuna de\u011finelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p><em>x86 .NET Framework<\/em> <em>4.8<\/em> uygulamas\u0131n\u0131 containerize edebilmek i\u00e7in ise, a\u015fa\u011f\u0131daki &#8220;<em>Dockerfile<\/em>&#8221; dosyas\u0131n\u0131 kulland\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">FROM mcr.microsoft.com\/dotnet\/framework\/runtime:4.8-windowsservercore-ltsc2019\r\nWORKDIR \/app\r\nCOPY . .\r\nENTRYPOINT [\"C:\\\\app\\\\MemoryLeakNETFramework.exe\"]\r\n<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ilk olarak a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m ve deploy etmi\u015f oldu\u011fumuz uygulamaya bir bakal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">kubectl get pod\r\nkubectl top pod<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/top-pod.jpg\"><img decoding=\"async\" width=\"1060\" height=\"196\" class=\"wp-image-4081 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/top-pod.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/top-pod.jpg 1060w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/top-pod-300x55.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/top-pod-1024x189.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/top-pod-768x142.jpg 768w\" data-sizes=\"(max-width: 1060px) 100vw, 1060px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1060px; --smush-placeholder-aspect-ratio: 1060\/196;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi ilgili uygulama \u015fuan <strong>579Mi<\/strong> civar\u0131nda bir memory kullan\u0131m\u0131 ger\u00e7ekle\u015ftirmekte. Bu kullan\u0131m\u0131n ise zamanla artt\u0131\u011f\u0131n\u0131 ve ilgili uygulaman\u0131n crash olmas\u0131na neden oldu\u011funu varsay\u0131yoruz. \u015eimdi ilgili uygulama crash olmadan \u00f6nce pod&#8217;unun i\u00e7erisine girelim ve memory dump alma i\u015flemini ger\u00e7ekle\u015ftirelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u00d6ncelikle <em>windows<\/em> container&#8217;\u0131n powershell session&#8217;\u0131na girebilmek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">kubectl exec -it YOUR_POD_NAME -- powershell<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Memory dump alma i\u015flemini ger\u00e7ekle\u015ftirebilmek i\u00e7in ise, <em>ProcDump<\/em> tool&#8217;unu kullanaca\u011f\u0131z. <em>ProcDump <\/em>command-line \u00fczerinden kolayca dump&#8217;lar alabilmemize olanak sa\u011flayan bir tool&#8217;dur.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi iligli pod&#8217;un powershell session&#8217;\u0131na girdikten sonra, <em>ProcDump<\/em> tool&#8217;unu a\u015fa\u011f\u0131daki komut yard\u0131m\u0131yla ilgili pod&#8217;un i\u00e7erisine download edelim ve ard\u0131ndan ilgili zip dosyas\u0131 i\u00e7erisinden \u00e7\u0131kartal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">PS C:\\app&gt; Invoke-WebRequest -UseBasicParsing -Uri https:\/\/download.sysinternals.com\/files\/Procdump.zip -OutFile C:\\app\\procdump.zip\r\n\r\nPS C:\\app&gt; Expand-Archive .\\procdump.zip<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/download-expand-procdump.jpg\"><img decoding=\"async\" width=\"1056\" height=\"436\" class=\"wp-image-4084 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/download-expand-procdump.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/download-expand-procdump.jpg 1056w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/download-expand-procdump-300x124.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/download-expand-procdump-1024x423.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/download-expand-procdump-768x317.jpg 768w\" data-sizes=\"(max-width: 1056px) 100vw, 1056px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1056px; --smush-placeholder-aspect-ratio: 1056\/436;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ise dump almak istedi\u011fimiz uygulaman\u0131n process <em>ID<\/em> bilgisine ihtiyac\u0131m\u0131z var. Bunun i\u00e7in &#8220;<em>Get-Process<\/em>&#8221; komutunu \u00e7al\u0131\u015ft\u0131ral\u0131m ve ilgili process&#8217;in <em>ID<\/em> bilgisini kopyalayal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ard\u0131ndan &#8220;<em>procdump<\/em>&#8221; klas\u00f6r\u00fcne girelim ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak dump alma i\u015flemini ger\u00e7ekle\u015ftirelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">.\\procdump.exe -ma YOUR_PROCESS_ID -s 5 -n 1 -accepteula<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Burada dikkat etmemiz gereken \u00f6nemli nokta, uygulaman\u0131n &#8220;<em>x86<\/em>&#8221; veya &#8220;<em>x64<\/em>&#8221; olarak hangi hedef platform&#8217;da \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 belirtmektir. E\u011fer uygulama &#8220;<em>x64<\/em>&#8221; olarak \u00e7al\u0131\u015f\u0131yorsa, dump al\u0131rken &#8220;<em>-64<\/em>&#8221; parametresinin eklenmesi yeterli olacakt\u0131r. Default &#8220;<em>x86<\/em>&#8221; olarak i\u015flem ger\u00e7ekle\u015ftirmektedir.<\/p>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/get-dump-procdump.jpg\"><img decoding=\"async\" width=\"1059\" height=\"743\" class=\"wp-image-4085 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/get-dump-procdump.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/get-dump-procdump.jpg 1059w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/get-dump-procdump-300x210.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/get-dump-procdump-1024x718.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/get-dump-procdump-768x539.jpg 768w\" data-sizes=\"(max-width: 1059px) 100vw, 1059px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1059px; --smush-placeholder-aspect-ratio: 1059\/743;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>Yukar\u0131daki komut k\u0131saca, &#8220;<em>5<\/em>&#8221; saniye gibi bir s\u00fcre ile bir adet full process dump alma i\u015flemi ger\u00e7ekle\u015ftirdi.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Full process dump&#8217;\u0131 ald\u0131\u011f\u0131m\u0131z i\u00e7in dump dosyas\u0131n\u0131n boyutu da bi hayli b\u00fcy\u00fck. Fakat bir \u00e7ok durum i\u00e7in full dump almak hayat kurtar\u0131c\u0131 olabiliyor.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi a\u015fa\u011f\u0131daki komut yard\u0131m\u0131 ile ilgili dump dosyas\u0131n\u0131 s\u0131k\u0131\u015ft\u0131ral\u0131m. B\u00f6ylece ilgili dump dosyas\u0131n\u0131 daha h\u0131zl\u0131 bir \u015fekilde pod i\u00e7erisinden kendi lokal ortam\u0131m\u0131za kopyalayabiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">PS C:\\app\\procdump&gt; Compress-Archive .\\MemoryLeakNETFramework.exe_220610_144815.dmp .\\mydump.zip<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/compress-dump-procdump.jpg\"><img decoding=\"async\" width=\"1055\" height=\"401\" class=\"wp-image-4086 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/compress-dump-procdump.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/compress-dump-procdump.jpg 1055w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/compress-dump-procdump-300x114.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/compress-dump-procdump-1024x389.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/compress-dump-procdump-768x292.jpg 768w\" data-sizes=\"(max-width: 1055px) 100vw, 1055px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1055px; --smush-placeholder-aspect-ratio: 1055\/401;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>S\u0131k\u0131\u015ft\u0131rma i\u015flemi tamamland\u0131\u011f\u0131na g\u00f6re, ilgili &#8220;<em>mydump.zip<\/em>&#8221; dosyas\u0131n\u0131 kendi lokal ortam\u0131m\u0131za kopyalayabiliriz. Bunun i\u00e7in kendi lokal ortam\u0131m\u0131z \u00fczerinde &#8220;<em>C:\\<\/em>&#8221; dizini alt\u0131na gelelim. Ar\u0131ndan a\u015fa\u011f\u0131daki komut ile kopyalama i\u015flemini ger\u00e7ekle\u015ftirelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">kubectl cp YOUR_POD_NAME:\/app\/procdump\/mydump.zip .\/procdump\/mydump.zip<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod.jpg\"><img decoding=\"async\" width=\"1076\" height=\"345\" class=\"wp-image-4087 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod.jpg 1076w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod-300x96.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod-1024x328.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/copy-dump-from-pod-768x246.jpg 768w\" data-sizes=\"(max-width: 1076px) 100vw, 1076px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1076px; --smush-placeholder-aspect-ratio: 1076\/345;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi ilgili dump dosyas\u0131, &#8220;<em>C:\\procdump<\/em>&#8221; dizini alt\u0131na kopyalanm\u0131\u015f durumda.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">Linux Container \u0130\u00e7erisinden Dump Alal\u0131m<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<p><em>Linux<\/em> container ile \u00f6rnek ger\u00e7ekle\u015ftirebilmek i\u00e7in ise ayn\u0131 kod blo\u011funu <em><strong>.NET 6<\/strong><\/em> ile containerize bir hale getirdim ve <em>linux-based<\/em> bir nodepool&#8217;a deployment i\u015flemini ger\u00e7ekle\u015ftirdim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Containerize edebilmek i\u00e7in ise a\u015fa\u011f\u0131daki &#8220;<em>Dockerfile<\/em>&#8221; \u0131 kulland\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">FROM mcr.microsoft.com\/dotnet\/runtime:6.0-focal AS base\r\nWORKDIR \/app\r\n\r\nFROM mcr.microsoft.com\/dotnet\/sdk:6.0-focal AS build\r\nWORKDIR \/src\r\nCOPY [\"MemoryLeakNET6.csproj\", \".\/\"]\r\nRUN dotnet restore \"MemoryLeakNET6.csproj\"\r\nCOPY . .\r\nWORKDIR \"\/src\/.\"\r\nRUN dotnet build \"MemoryLeakNET6.csproj\" -c Release -o \/app\/build\r\n\r\nFROM build AS publish\r\nRUN dotnet publish \"MemoryLeakNET6.csproj\" -c Release -o \/app\/publish \/p:UseAppHost=false\r\n\r\nFROM base AS final\r\nWORKDIR \/app\r\nCOPY --from=publish \/app\/publish .\r\nENTRYPOINT [\"dotnet\", \"MemoryLeakNET6.dll\"]<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/kubectl-top.jpg\"><img decoding=\"async\" width=\"1010\" height=\"285\" class=\"wp-image-4121 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/kubectl-top.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/kubectl-top.jpg 1010w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/kubectl-top-300x85.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/kubectl-top-768x217.jpg 768w\" data-sizes=\"(max-width: 1010px) 100vw, 1010px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1010px; --smush-placeholder-aspect-ratio: 1010\/285;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ise dump alabilmek i\u00e7in container&#8217;\u0131n<i> shell<\/i>\u00a0session&#8217;\u0131na girelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\"><span class=\"s1\">kubectl exec -it YOUR_POD_NAME -- \/bin\/sh<\/span><\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Dump alma i\u015flemini <em>linux<\/em> container i\u00e7erisinde ger\u00e7ekle\u015ftirebilmek i\u00e7in bir ka\u00e7 farkl\u0131 se\u00e7ene\u011fimiz bulunmakta. Ben bu sefer <em>Microsoft<\/em>&#8216;un .<em>NET Core 3.1<\/em> ve \u00fczerine i\u00e7in sunmu\u015f oldu\u011fu .<em>NET diagnostics CLI tools<\/em>&#8216;unu kullanaca\u011f\u0131m. Bu tool&#8217;lar i\u00e7erisinde ise &#8220;<em>dotnet-dump<\/em>&#8221; ve &#8220;<em>dotnet-gcdump<\/em>&#8221; olmak \u00fczere iki farkl\u0131 tool bulunmakta. Ben dump analiz i\u015flemlerini ger\u00e7ekle\u015ftirirken <em>SOS<\/em> komutlar\u0131ndan yararlanabilmek istedi\u011fim i\u00e7in, &#8220;<em>dotnet-dump<\/em>&#8221; tool&#8217;unu kullanaca\u011f\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u00d6ncelikle a\u015fa\u011f\u0131daki komutlar\u0131 kullanarak, &#8220;<em>dotnet-dump<\/em>&#8221; tool&#8217;unu container i\u00e7erisine indirelim. Farkl\u0131 platform se\u00e7eneklerine ise, <em><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/diagnostics\/dotnet-dump?WT.mc_id=DT-MVP-5003382\" target=\"_blank\" rel=\"noopener\">buradan<\/a><\/em> eri\u015febilirsiniz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">apt-get update\r\napt-get install wget\r\nwget -O dotnet-dump https:\/\/aka.ms\/dotnet-dump\/linux-x64\r\nchmod 777 .\/dotnet-dump<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi dump almak istedi\u011fimiz uygulaman\u0131n process <em>ID<\/em> bilgisine eri\u015febilmek i\u00e7in ise, &#8220;<em>.\/dotnet-dump ps<\/em>&#8221; komutunu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Process <em>ID<\/em> bilgisini elde ettikten sonra, a\u015fa\u011f\u0131daki komut ile uygulaman\u0131n dump&#8217;\u0131n\u0131 alal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">.\/dotnet-dump collect -p YOUR_PROCESS_ID<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/dotnet-get-dump.jpg\"><img decoding=\"async\" width=\"1007\" height=\"286\" class=\"wp-image-4122 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/dotnet-get-dump.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dotnet-get-dump.jpg 1007w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dotnet-get-dump-300x85.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dotnet-get-dump-768x218.jpg 768w\" data-sizes=\"(max-width: 1007px) 100vw, 1007px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1007px; --smush-placeholder-aspect-ratio: 1007\/286;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi &#8220;<em>630MB<\/em>&#8221; lik bir full dump dosyas\u0131 olu\u015fturulmu\u015f durumda.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Local ortam\u0131m\u0131za kopyalamadan \u00f6nce ilgili dump dosyas\u0131n\u0131 ayn\u0131 \u015fekilde s\u0131k\u0131\u015ft\u0131rmam\u0131z gerekmektedir. Bu sefer ilgili container i\u00e7erisinde bulunan &#8220;<em>gzip<\/em>&#8221; tool&#8217;undan yararlanabiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">gzip DUMP_NAME<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ard\u0131ndan &#8220;<em>.gz<\/em>&#8221; uzant\u0131l\u0131 dump dosyas\u0131n\u0131, kendi local ortam\u0131m\u0131za a\u015fa\u011f\u0131daki gibi kopyalayabiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">kubectl cp YOUR_POD_NAME:\/app\/DUMP_NAME.gz .\/dotnetdump\/mydump.gz<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">WinDbg ile Dump Analizine Ba\u015flayal\u0131m<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Dump dosyalar\u0131n\u0131 analiz edebilmek i\u00e7in <em>WinDbg, <\/em><em>Visual Studio, PerfView<\/em><em>\u00a0<\/em>vb. gibi farkl\u0131 tool se\u00e7enekleri bulunmaktad\u0131r. Ben bu makale kapsam\u0131nda ise <em>windows<\/em> container&#8217;dan alm\u0131\u015f oldu\u011fumuz dump i\u00e7in, <em>WinDbg<\/em>&#8216;\u0131 kullanaca\u011f\u0131m. E\u011fer daha g\u00f6rsel bir tool tercih etmek isterseniz ise di\u011fer se\u00e7enekleri de de\u011ferlendirebilirsiniz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p><em>WinDbg<\/em>&#8216;a sahip de\u011filseniz <strong><em><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/debugger\/debugger-download-tools?WT.mc_id=DT-MVP-5003382\" target=\"_blank\" rel=\"noopener\">buradaki<\/a> <\/em><\/strong>link \u00fczerinden &#8220;<em>Debugging Tools for Windows<\/em>&#8221; ba\u015fl\u0131\u011f\u0131n\u0131 takip ederek elde edebilirsiniz. Ayr\u0131ca <em>WinDbg Preview<\/em> ismi ile yeni bir versiyonu da bulunmakta. Fakat ben eski versiyonu gibi stable bir \u015fekilde \u00e7al\u0131\u015ft\u0131ramad\u0131m. Bu y\u00fczden preview olmayan versiyonu \u00fczerinden ilerleyece\u011fim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Dump alma i\u015flemini <em>x86<\/em> hedef platform&#8217;u ile ger\u00e7ekle\u015ftirdi\u011fimiz i\u00e7in, <em>WinDbg (x86)<\/em> versiyonunu \u00e7al\u0131\u015ft\u0131ral\u0131m ve &#8220;<em>File&gt;Open Crash Dump<\/em>&#8221; men\u00fcs\u00fcn\u00fc takip ederek &#8220;<em>C:\\procdump<\/em>&#8221; dizini alt\u0131na kopyalam\u0131\u015f oldu\u011fumuz dump dosyas\u0131n\u0131 se\u00e7elim.<\/p>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/windbg-load-first.jpg\"><img decoding=\"async\" width=\"1079\" height=\"560\" class=\"wp-image-4091 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/windbg-load-first.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/windbg-load-first.jpg 1079w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/windbg-load-first-300x156.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/windbg-load-first-1024x531.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/windbg-load-first-768x399.jpg 768w\" data-sizes=\"(max-width: 1079px) 100vw, 1079px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1079px; --smush-placeholder-aspect-ratio: 1079\/560;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ilk olarak debugging i\u015flemlerinde symbol&#8217;leri kullanabilmek i\u00e7in (<em>callstack, variables<\/em>), a\u015fa\u011f\u0131daki gibi symbol search path&#8217;ine &#8220;<em>Microsoft Symbol<\/em>&#8221; server ve uygulaman\u0131n <strong><i>pdb <\/i><\/strong>dosyalar\u0131n\u0131n bulundu\u011fu path&#8217;leri ekleyelim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">.sympath srv*https:\/\/msdl.microsoft.com\/download\/symbols\r\n.sympath+ C:\\source\\MemoryLeakNETFramework\\bin\\Debug<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ard\u0131ndan detayl\u0131 symbol log&#8217;lar\u0131n\u0131 g\u00f6rebilmek ve yeni symbol bilgilerinin y\u00fcklenebilmesi i\u00e7in, a\u015fa\u011f\u0131daki iki komutu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">!sym noisy\r\n.reload<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ise managed code debug i\u015flemini ger\u00e7ekle\u015ftirebilmemiz i\u00e7in <em>SOS Debugging Extension<\/em>&#8216;\u0131n\u0131, <em>WinDbg<\/em> i\u00e7erisine y\u00fcklememiz gerekmektedir. Bu y\u00fckleme i\u015flemi s\u0131ras\u0131nda ise y\u00fckleyecek oldu\u011fumuz <i>SOS <\/i>extension&#8217;\u0131n\u0131n versiyonu ve bitness&#8217;\u0131, dump&#8217;\u0131n al\u0131nd\u0131\u011f\u0131 host \u00fczerindeki <em>CLR<\/em> versiyonu ve bitness&#8217;\u0131 ile e\u015fle\u015fiyor olmas\u0131 gerekmektedir.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Neyseki &#8220;<em>!analyze \u2013v<\/em>&#8221; komutu ile uygun olan <em>SOS<\/em> extension kolay bir \u015fekilde y\u00fcklenebilmektedir. Normalde crash dump&#8217;lar\u0131 i\u00e7in exception analizlerinde kullanabilece\u011fimiz bu komut&#8217;u, gerekli olan t\u00fcm dll&#8217;lerin otomatik olarak symbol search path&#8217;leri \u00fczerinden y\u00fcklenebilmesi i\u00e7in de kullanabiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><em><strong>NOT<\/strong><\/em>: Uygun <em>SOS<\/em> dll&#8217;inin bulunamamas\u0131 durumunda ise i\u015fler biraz karma\u015f\u0131kla\u015fmaktad\u0131r. E\u011fer dump&#8217;\u0131n al\u0131nd\u0131\u011f\u0131 hedef server&#8217;a hala eri\u015fim sa\u011flanabilyorsa, oradan ilgili <em>SOS <\/em>ve <em>mscordacwks<\/em> dll&#8217;lerinin al\u0131nmas\u0131 veya ilgili <em>Microsoft<\/em> update patch&#8217;inin bulunup, ilgili patch i\u00e7ersinden ilgili dll&#8217;lerin al\u0131nmas\u0131 gerekmektedir. Ard\u0131ndan &#8220;<em>.load C:\\SOS\\sos.XXX.dll<\/em>&#8221; komutu ile <em>WinDbg<\/em> i\u00e7erisine manuel bir \u015fekilde dahil edilmelidir.<\/p>\r\n<\/blockquote>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ilgili <em>SOS<\/em> extension&#8217;\u0131n y\u00fcklenebilmesi i\u00e7in a\u015fa\u011f\u0131daki gibi &#8220;<em>!analyze \u2013v<\/em>&#8221; komutunu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/06\/sos-loaded.jpg\"><img decoding=\"async\" width=\"1077\" height=\"559\" class=\"wp-image-4095 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/06\/sos-loaded.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/sos-loaded.jpg 1077w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/sos-loaded-300x156.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/sos-loaded-1024x531.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/06\/sos-loaded-768x399.jpg 768w\" data-sizes=\"(max-width: 1077px) 100vw, 1077px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1077px; --smush-placeholder-aspect-ratio: 1077\/559;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi <em>SOS<\/em> extension&#8217;\u0131, &#8220;<em>x86_4.8.4515.00<\/em>&#8221; versiyonu ile <em>WinDbg<\/em> i\u00e7erisine load edilmi\u015f durumda. Ayr\u0131ca load edilmi\u015f olan di\u011fer extension&#8217;lar\u0131 da g\u00f6rebilmek i\u00e7in, &#8220;<em>.chain<\/em>&#8221; komutunu \u00e7al\u0131\u015ft\u0131rmam\u0131z yeterli olacakt\u0131r.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Art\u0131k heap&#8217;i incelemeye ba\u015flayabiliriz. Bunun i\u00e7in ilk olarak a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">!dumpheap -stat<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/dump-heap.jpg\"><img decoding=\"async\" width=\"1077\" height=\"560\" class=\"wp-image-4098 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/dump-heap.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-heap.jpg 1077w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-heap-300x156.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-heap-1024x532.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-heap-768x399.jpg 768w\" data-sizes=\"(max-width: 1077px) 100vw, 1077px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1077px; --smush-placeholder-aspect-ratio: 1077\/560;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>Bu komut bize k\u0131saca managed heap i\u00e7erisinde allocate edilmi\u015f objeleri ve onlar\u0131n ne kadar memory kulland\u0131klar\u0131n\u0131n istatistiksel bir \u00f6zetini g\u00f6stermektedir. Bizimde \u00f6rnek senaryo gere\u011fi amac\u0131m\u0131z memory leak&#8217;e sebebiyet veren noktay\u0131 belirleyebilmek oldu\u011fu i\u00e7in, heap \u00fczerinde neler olup bitti\u011fini incelemek bizi do\u011fru bir noktaya g\u00f6t\u00fcrecektir.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Yukar\u0131daki resme bakt\u0131\u011f\u0131m\u0131zda &#8220;<em>MemoryLeakNETFramework.ProductDTO<\/em>&#8221; ve &#8220;<em>System.Byte[]<\/em>&#8221; objelerinin &#8220;<em>500000<\/em>&#8221; kere kay\u0131t edildi\u011fini ve ortalama &#8220;<em>8MB<\/em>&#8221; ve &#8220;<em>518MB<\/em>&#8221; yer kapl\u0131yor olduklar\u0131n\u0131 g\u00f6rebiliriz. Bu bilgilerden yola \u00e7\u0131karak memory leak olu\u015fumunun bu noktalardan kaynaklan\u0131yor olabilece\u011fini san\u0131r\u0131m s\u00f6yleyebiliriz. K\u0131sacas\u0131 memory leak kayna\u011f\u0131n\u0131n izini s\u00fcrerken objelerin ya \u00e7ok fazla kay\u0131t ediliyor olmas\u0131na yada kaplad\u0131klar\u0131 alanlar\u0131na g\u00f6re inceliyor olmam\u0131z gerekmektedir.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi &#8220;<em>MemoryLeakNETFramework.ProductDTO<\/em>&#8221; objesinin biraz daha detaylar\u0131na bakal\u0131m. Bunun i\u00e7in \u00f6ncelikle bu objenin method table&#8217;\u0131na eri\u015fmemiz gerekmektedir. Yani &#8220;<em>MemoryLeakNETFramework.ProductDTO<\/em>&#8221; objesinin ilk s\u00fctun&#8217;unda bulunan <em>MT<\/em> (Method Table) adresini kopyalayal\u0131m ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">!dumpheap -mt 010d4e80<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ard\u0131ndan listelenen sonu\u00e7lar i\u00e7erisinden herhangi bir instance&#8217;\u0131n memory adresini alarak, a\u015fa\u011f\u0131daki gibi detaylar\u0131na eri\u015felim sa\u011flayal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">!dumpobj 386fde58<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/dump-obj.jpg\"><img decoding=\"async\" width=\"1077\" height=\"552\" class=\"wp-image-4103 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/dump-obj.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-obj.jpg 1077w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-obj-300x154.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-obj-1024x525.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/dump-obj-768x394.jpg 768w\" data-sizes=\"(max-width: 1077px) 100vw, 1077px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1077px; --smush-placeholder-aspect-ratio: 1077\/552;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi memory&#8217;deki objeleri dump ederek, dump&#8217;\u0131n\u0131 ald\u0131\u011f\u0131m\u0131z andaki de\u011ferlerine eri\u015febilmekteyiz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Dilersek &#8220;<em>!objsize<\/em>&#8221; komutu ile, istedi\u011fimiz bir objenin size&#8217;\u0131n\u0131 da ayr\u0131ca g\u00f6rebiliriz. \u00d6rne\u011fin bu obje i\u00e7erisindeki &#8220;<em>System.Byte[]<\/em>&#8221; field&#8217;\u0131n\u0131n size&#8217;\u0131n\u0131 g\u00f6rebilmek i\u00e7in, &#8220;<em>Value<\/em>&#8221; s\u00fctun&#8217;unda bulunan referans adresini kopyalayal\u0131m ve a\u015fa\u011f\u0131daki komut&#8217;u \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">!objsize 386fde74<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/objsize.jpg\"><img decoding=\"async\" width=\"1079\" height=\"346\" class=\"wp-image-4104 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/objsize.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/objsize.jpg 1079w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/objsize-300x96.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/objsize-1024x328.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/objsize-768x246.jpg 768w\" data-sizes=\"(max-width: 1079px) 100vw, 1079px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1079px; --smush-placeholder-aspect-ratio: 1079\/346;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi &#8220;<em>MemoryLeakNETFramework.ProductDTO<\/em>&#8221; objesi i\u00e7erisinde bulunan &#8220;<em>System.Byte[]<\/em>&#8221;\u00a0tipindeki field, memory&#8217;de &#8220;<em>1036<\/em>&#8221; byte&#8217;l\u0131k yer kaplamaktad\u0131r. Heap i\u00e7erisinde &#8220;<em>500000<\/em>&#8221; kere kay\u0131t edildi\u011fini de g\u00f6z \u00f6n\u00fcne al\u0131rsak, ortalama &#8220;<em>518MB<\/em>&#8221; lik bir allocation&#8217;\u0131n bu field&#8217;lar sebebiyle ger\u00e7ekle\u015fti\u011fini s\u00f6yleyebiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">Dotnet-Dump ile Core Dump&#8217;\u0131 Analiz Edelim<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi ise &#8220;<em>dotnet-dump<\/em>&#8221; tool&#8217;u ile linux container i\u00e7erisinden alm\u0131\u015f oldu\u011fumuz core dump&#8217;\u0131n analiz i\u015flemine bir bakal\u0131m. &#8220;<em>dotnet-dump<\/em>&#8221; tool&#8217;u <em>linux<\/em> veya <em>windows<\/em> container&#8217;lar i\u00e7erisinden dump alabilmemizi sa\u011flad\u0131\u011f\u0131 gibi, ayr\u0131ca dump&#8217;\u0131 analiz edebilmemizi de sa\u011flamaktad\u0131r. Hatta ilgili dump dosyas\u0131n\u0131 local ortam\u0131m\u0131za ta\u015f\u0131madan, ilgili container i\u00e7erisinde de <strong>ad-hoc<\/strong> analizler ger\u00e7ekle\u015ftirebilmemize olanak tan\u0131maktad\u0131r.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u015eimdi local ortam\u0131m\u0131zda analiz i\u015flemini ger\u00e7ekle\u015ftirmeden \u00f6nce, &#8220;<em>dotnet-dump<\/em>&#8221; tool&#8217;unu a\u015fa\u011f\u0131daki gibi local ortam\u0131m\u0131za da kural\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">dotnet tool install --global dotnet-dump<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Ard\u0131ndan a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak, &#8220;<em>dotnet-dump<\/em>&#8221; &#8216;\u0131n terminal \u00fczerinden interaktif analiz session&#8217;\u0131na eri\u015felim.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">dotnet-dump analyze .\\YOUR_CORE_DUMP_PATH<\/pre>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Art\u0131k bu session \u00fczerinden <em>WinDbg<\/em> ile analiz ger\u00e7ekle\u015ftirdi\u011fimiz gibi, yine ayn\u0131 <em>SOS<\/em> komutlar\u0131ndan (bir \u00e7o\u011fu) yararlanarak istedi\u011fimiz analizleri ger\u00e7ekle\u015ftirebiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>\u00d6rne\u011fin yine heap&#8217;i incelemek i\u00e7in, a\u015fa\u011f\u0131daki ayn\u0131 komutu kullanal\u0131m.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<pre class=\"wp-block-preformatted\">dumpheap -stat<\/pre>\r\n<p><\/p>\r\n<p><div class=\"wp-block-image\"><\/p>\r\n<figure class=\"aligncenter\"><a href=\"\/wp-content\/uploads\/2022\/07\/get-heap-core-dump.jpg\"><img decoding=\"async\" width=\"1037\" height=\"505\" class=\"wp-image-4125 lazyload\" data-src=\"\/wp-content\/uploads\/2022\/07\/get-heap-core-dump.jpg\" alt=\"\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/get-heap-core-dump.jpg 1037w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/get-heap-core-dump-300x146.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/get-heap-core-dump-1024x499.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/get-heap-core-dump-768x374.jpg 768w\" data-sizes=\"(max-width: 1037px) 100vw, 1037px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1037px; --smush-placeholder-aspect-ratio: 1037\/505;\" \/><\/a><\/figure>\r\n<p><\/div><\/p>\r\n<p><\/p>\r\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi yine <em>SOS<\/em> komutlar\u0131 ile ayn\u0131 i\u015flemleri uygulayarak, memory leak kayna\u011f\u0131n\u0131 ayn\u0131 \u015fekilde inceleyebiliriz.<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<p>Bunlar d\u0131\u015f\u0131nda yararl\u0131 buldu\u011fum baz\u0131 komutlar ise:<\/p>\r\n<p><\/p>\r\n<p><\/p>\r\n<ul class=\"wp-block-list\">\r\n<li>&#8220;<em>threads<\/em>&#8221; komutu ile t\u00fcm thread&#8217;leri listeleyip, istedi\u011fimiz thread&#8217;ler aras\u0131 ge\u00e7i\u015fler yapabiliriz. <em>WinDbg<\/em> i\u00e7in &#8220;<em>~[threadid]s<\/em>&#8221; komutu, &#8220;<em style=\"font-size: 1em;\">dotnet-dump<\/em><span style=\"font-size: 1em;\">&#8221; i\u00e7in ise &#8220;<\/span><em style=\"font-size: 1em;\">threads [threadid]<\/em><span style=\"font-size: 1em;\">&#8221; komutunu kullanabiliriz.<\/span><\/li>\r\n<li>&#8220;<em>clrstack<\/em>&#8221; komutu ile de ilgili thread&#8217;in stack&#8217;ini g\u00f6r\u00fcnt\u00fcleyebilir ve memory&#8217;de neler olup bitti\u011fini inceleyebilirz. \u00d6rne\u011fin exception&#8217;lar\u0131 g\u00f6rebilmek gibi.<\/li>\r\n<li>&#8220;<em>gcroot<\/em>&#8221; komutu ile ise ilgili objeyi referans olarak tutan di\u011fer t\u00fcm objeleri listeleyebiliriz.<\/li>\r\n<li>&#8220;<em>syncblk<\/em>&#8221; komutu ile sync block table&#8217;a bakabiliriz. \u00d6zellikle deadlock&#8217;lar\u0131 incelemek istiyorsak hangi thread&#8217;in lock&#8217;\u0131 tuttu\u011funu sync block table \u00fczerinden bulup, daha sonra ilgili thread&#8217;in clrstack&#8217;ini inceleyebiliriz.<\/li>\r\n<\/ul>\r\n<p><\/p>\r\n<p><\/p>\r\n<h2 class=\"wp-block-heading\">Referanslar<\/h2>\r\n<p><\/p>\r\n<p><\/p>\r\n<ul class=\"wp-block-list\">\r\n<li><em><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/diagnostics\/dotnet-dump?WT.mc_id=DT-MVP-5003382\">https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/diagnostics\/dotnet-dump<\/a><\/em><\/li>\r\n<li><em><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/debugger\/symbol-path?WT.mc_id=DT-MVP-5003382\">https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/debugger\/symbol-path<\/a><\/em><\/li>\r\n<\/ul>\r\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Bildi\u011fimiz gibi memory leak&#8217;lerden veya bilinmeyen sebeplerden dolay\u0131 crash veya hang olan uygulamalar\u0131m\u0131z\u0131 debug edebilmenin en iyi yolu, dump dosyalar\u0131n\u0131 incelemekten ge\u00e7mektedir. En az\u0131ndan benim tecr\u00fcbelerim genelde bu y\u00f6nde oldu. Bizler ise developer&#8217;lar olarak, en az\u0131ndan uygulamalar\u0131m\u0131z\u0131n neden beklenmedik \u015fekilde davrand\u0131klar\u0131n\u0131 anlayabilecek kadar dump analizlerini&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">.NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&#038;Linux Containers) \u0130\u00e7erisinden Memory Dump&#8217;lar\u0131n\u0131 Almak<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":4134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,505,418,434,457,175],"tags":[597,635,526,549,643,647,639,644,645,642,641,640,646,168],"class_list":["post-4072","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-net-core","category-azure","category-containerizing","category-dotnet","category-performans-profiling","tag-net-5","tag-net-6","tag-net-core","tag-net-framework","tag-crash-dump","tag-debugging","tag-diagnostics","tag-dump","tag-hang","tag-memory-analysis","tag-memory-leak","tag-performance-problem","tag-profiling","tag-windbg","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":true,"content":true,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>.NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&amp;Linux Containers) \u0130\u00e7erisinden Memory Dump&#039;lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&amp;Linux Containers) \u0130\u00e7erisinden Memory Dump&#039;lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-21T18:44:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-22T09:08:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&#038;Linux Containers) \u0130\u00e7erisinden Memory Dump&#8217;lar\u0131n\u0131 Almak\",\"datePublished\":\"2022-07-21T18:44:00+00:00\",\"dateModified\":\"2022-07-22T09:08:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/\"},\"wordCount\":4232,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/net-memory-dumps.jpg\",\"keywords\":[\".net 5\",\".net 6\",\".net core\",\".net framework\",\"crash dump\",\"debugging\",\"diagnostics\",\"dump\",\"hang\",\"memory analysis\",\"memory leak\",\"performance problem\",\"profiling\",\"WinDBG\"],\"articleSection\":[\".NET\",\".NET Core\",\"Azure\",\"Containerizing\",\"dotnet\",\"Performans (Profiling)\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/\",\"name\":\".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&Linux Containers) \u0130\u00e7erisinden Memory Dump'lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/net-memory-dumps.jpg\",\"datePublished\":\"2022-07-21T18:44:00+00:00\",\"dateModified\":\"2022-07-22T09:08:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/net-memory-dumps.jpg\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/net-memory-dumps.jpg\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Memory Dump of .NET Applications (Windows&#038;Linux Containers) on Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&Linux Containers) \u0130\u00e7erisinden Memory Dump'lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/","og_locale":"tr_TR","og_type":"article","og_title":".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&Linux Containers) \u0130\u00e7erisinden Memory Dump'lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2022-07-21T18:44:00+00:00","article_modified_time":"2022-07-22T09:08:27+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg","type":"image\/jpeg"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&#038;Linux Containers) \u0130\u00e7erisinden Memory Dump&#8217;lar\u0131n\u0131 Almak","datePublished":"2022-07-21T18:44:00+00:00","dateModified":"2022-07-22T09:08:27+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/"},"wordCount":4232,"commentCount":0,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg","keywords":[".net 5",".net 6",".net core",".net framework","crash dump","debugging","diagnostics","dump","hang","memory analysis","memory leak","performance problem","profiling","WinDBG"],"articleSection":[".NET",".NET Core","Azure","Containerizing","dotnet","Performans (Profiling)"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/","url":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/","name":".NET Uygulamalar\u0131n\u0131n Kubernetes (Windows&Linux Containers) \u0130\u00e7erisinden Memory Dump'lar\u0131n\u0131 Almak - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg","datePublished":"2022-07-21T18:44:00+00:00","dateModified":"2022-07-22T09:08:27+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2022\/07\/net-memory-dumps.jpg","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/getting-memory-dump-of-net-applications-windows-linux-containers-on-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Getting Memory Dump of .NET Applications (Windows&#038;Linux Containers) on Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/4072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=4072"}],"version-history":[{"count":5,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/4072\/revisions"}],"predecessor-version":[{"id":4140,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/4072\/revisions\/4140"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/4134"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=4072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=4072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=4072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}