Aracılığıyla paylaş


Bellek yetersiz sorunlarının neden olduğu uygulama yeniden başlatma sorunları

Not

Azure Spring Apps, Azure Spring Cloud hizmetinin yeni adıdır. Hizmetin yeni bir adı olsa da, ekran görüntüleri, videolar ve diyagramlar gibi varlıkları güncelleştirmek için çalışırken bazı yerlerde eski adı bir süre görürsünüz.

Bu makale şunlar için geçerlidir: ✔️ Temel/Standart ✔️ Kurumsal

Bu makalede, Azure Spring Apps'teki Java uygulamaları için yetersiz bellek (OOM) sorunları açıklanmaktadır.

Yetersiz bellek sorunları türleri

İki tür yetersiz bellek sorunu vardır: kapsayıcı OOM ve JVM OOM.

  • Sistem OOM olarak da adlandırılan kapsayıcı OOM, kullanılabilir uygulama belleği tükendiğında oluşur. Kapsayıcı OOM sorunu, Azure portalının Kaynak Durumu bölümünde bildirilen uygulama yeniden başlatma olaylarına neden olur. Normalde, kapsayıcı OOM yanlış bellek boyutu yapılandırmalarından kaynaklanır.

  • JVM OOM, kullanılan bellek miktarı JVM seçeneklerinde ayarlanan boyut üst sınırına ulaştığında oluşur. JVM OOM, bir uygulamanın yeniden başlatılmasına neden olmaz. Normalde JVM OOM, uygulama günlüğünde özel durumları arayarak java.lang.OutOfMemoryError bulabileceğiniz hatalı kodun bir sonucudur. JVM OOM, Java Flight Recorder gibi uygulama ve Java Profil oluşturma araçları üzerinde olumsuz bir etkiye sahiptir.

Bu makalede, kapsayıcı OOM sorunlarının nasıl düzeltilmesine odaklanılır. JVM OOM sorunlarını düzeltmek için yığın dökümü, iş parçacığı dökümü ve Java Flight Recorder gibi araçları denetleyin. Daha fazla bilgi için bkz . Yığın dökümünü ve iş parçacığı dökümünü el ile yakalama ve Azure Spring Apps'te Java Flight Recorder kullanma.

OOM nedeniyle uygulama yeniden başlatma sorunlarını düzeltme

Aşağıdaki bölümlerde, kapsayıcı OOM sorunlarını tanılamak ve düzeltmek için kullanabileceğiniz araçlar, ölçümler ve JVM seçenekleri açıklanmaktadır.

Kaynak durumu sayfasında uyarıları görüntüleme

Azure portalındaki Kaynak durumu sayfasında, aşağıdaki ekran görüntüsünde gösterildiği gibi kapsayıcı OOM nedeniyle uygulama yeniden başlatma olayları gösterilir:

Screenshot of Azure portal showing Azure Spring Apps Resource Health page with OOM message highlighted.

Bellek boyutunu yapılandırma

Ölçümler Uygulama belleği Kullanımıjvm.memory.used ve jvm.memory.committed bellek kullanımına ilişkin bir görünüm sağlar. Daha fazla bilgi için Bellek sorunlarını gidermek için Araçlar'ın Ölçümler bölümüne bakın. Belleğin sınırın altında olduğundan emin olmak için JVM seçeneklerinde en büyük bellek boyutlarını yapılandırın.

Java bellek modelindeki tüm bölümlerin maksimum bellek boyutlarının toplamı, gerçek kullanılabilir uygulama belleğinden küçük olmalıdır. En büyük bellek boyutlarınızı ayarlamak için Java bellek yönetiminin Bellek kullanımı düzeni bölümünde açıklanan tipik bellek düzenine bakın.

Maksimum bellek boyutunu ayarlarken bir bakiye bulun. Maksimum bellek boyutunu çok yüksek ayarladığınızda kapsayıcı OOM riski vardır. Maksimum bellek boyutunu çok düşük ayarladığınızda JVM OOM riski vardır ve çöp toplama işlemi uygulamayı yavaşlatır ve yavaşlatır.

Yığın belleğini denetleme

, , -Xmx-XX:InitialRAMPercentageve -XX:MaxRAMPercentage JVM seçeneklerini kullanarak -Xmsen büyük yığın boyutunu ayarlayabilirsiniz.

Ölçümlerde değeri jvm.memory.used çok yüksek olduğunda en yüksek yığın boyutu ayarlarını yapmanız gerekebilir. Daha fazla bilgi için, bellek sorunlarını gidermek için Araçlar'ın jvm.memory.used/committed/max bölümüne bakın.

Doğrudan belleği denetleme

Aşağıdaki nedenlerle JVM seçeneğini ayarlamak -XX:MaxDirectMemorySize önemlidir:

  • Nio ve gzip gibi çerçevelerin doğrudan bellek kullandığını fark edemeyebilirsiniz.
  • Doğrudan belleğin atık toplama işlemi yalnızca tam çöp toplama sırasında işlenir ve tam çöp toplama işlemi yalnızca yığın dolduğunda gerçekleşir.

Normalde, uygulama bellek boyutu eksi yığın belleği eksi yığın olmayan bellek değerinden daha küçük bir değere ayarlayabilirsiniz MaxDirectMemorySize .

Meta alanı denetleme

JVM seçeneğini ayarlayarak -XX:MaxMetaspaceSize maksimum meta alan boyutunu ayarlayabilirsiniz. seçeneği tam -XX:MetaspaceSize çöp toplamayı tetikleye eşik değerini ayarlar.

Meta uzay belleği genellikle kararlıdır.

Ayrıca bkz.