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

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

21.9.2018 15:34:49

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.com2.3.2019 21:10:15

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

  • Hasan Akpürüm21.9.2018 22:44:09

    <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 Kale21.9.2018 22:16:44

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

  • Ethem YAPAR21.9.2018 16:19:56

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

Yorum yaz

Thanks, your message is sent successfully.