Hasan Akpürüm
Kıdemli Yazılım Danışmanı
Makele Detayı

.net core 2.0 Memory Sorunu Çözümü

9/21/2018 3:34:49 PM

Merhaba arkadaşlar,

Bu makalemde sizler .net core 2.0 da sunucu üzerindeki çok yoğun memory kullanımının çözümünden bahsetmeye çalışacağım.

Öncelikle yaşanılan sorundan bahsetmeye çalışacağım. .Net Core 2.0 ile yapılmış wep api servisi ayağa kalktıktan belli bir süre sonra çok fazla memory tüketmeye başlıyordu. Artan bir şekilde yükselmeye devam ediyordu. Hatta kullandığı memory zaman zaman 25 gb ları buluyordu ve applicaton pool restart edilmeden memory den düşmüyordu.

.NET Core 2.0 bellek sorunlarının giderilmesinde uygulayabileceğiniz basit bir çözüm bulunmaktadır. Garbage Collection ayarlarını değiştirerek bu sorunu aşabilirsiniz. Araştırmalarıma göre bu durum .net core 2.1 de çözülmüş gibi duruyor.

Visual Studio 2015 için project.json dosyasındaki "System.GC.Server" öğesini "true" dan "false" a dönüştürün:

"runtimeOptions": {

  "configProperties": {

    "System.GC.Server": false

  }

}

Visual Studio 2017 de bu ayarlar "xxxxxxx.csproj" dosyasına taşındığından , "ServerGarbageCollecton" XML değerini "true" dan "false" a dönüştürün.

<PropertyGroup>

    <ServerGarbageCollection>false</ServerGarbageCollection>

</PropertyGroup>

Proje dosyanıza sağ tıklayıp Edit "xxxxxxx.csproj" yazan alana tıklayarak bu ayarları görebilirsiniz.
Bu işlemleri yaptıktan sonra projenizi tekrar publish edin.

Bunun nedeni Mark Vincze'ye göre :
Memory deki bu artış CPU sayısı, Server Garbage Collection ile .NET'in kullanacağı bellek miktarını büyük ölçüde etkilemesidir.

Bu değerin değiştirilmesi, .NET Core uygulamanızın kullanacağı bellek miktarını azaltmalıdır.

Umarım faydalı bir makale olmuştur.
Herkese Kolay Gelsin

Yorumlar
  • efecome@windowslive.com3/2/2019 9:10:15 PM

    Peki windows sunucularda ilk resuestte saniyelerce acilmayam ve sonraki requestlerde hizli acilan problemi nasil cozdunuz?

  • Hasan Akpürüm9/21/2018 10:44:09 PM

    <p>Merhaba Murat Bey,</p> <p>Tam tersi cpu da düşüş gözlenlendi ve compile işleminde her hangi bir sorun gerçekleşmedi. Aşağıdaki<br> <a href="https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals#concurrent-garbage-collection" target="_blank">microsoft docs</a> ve <a href="https://blog.markvincze.com/troubleshooting-high-memory-usage-with-asp-net-core-on-kubernetes/" target="_blank">mark vincze</a> analizlerinide inceleyebilirsiniz.</p> <p>Saygılarımla</p>

  • Murat Kale9/21/2018 10:16:44 PM

    False a çekmenin memory de avantajı olup başka bir case (runtime,cpu yada compile)’de dezavantajı olabilir mi sence ?

  • Ethem YAPAR9/21/2018 4:19:56 PM

    Faydalı ve güzel bir paylaşım olmuş. Eline sağlık.

Yorum yaz

Thanks, your message is sent successfully.