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:
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:InitialRAMPercentage
ve -XX:MaxRAMPercentage
JVM seçeneklerini kullanarak -Xms
en 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin