Share via


Üst düzey uygulamalarda bellek kullanımı

Bu konuda, üst düzey uygulamalarda bellek kullanımıyla ilgili ayrıntılar sağlanır. Gerçek zamanlı özellikli uygulamalar (RTApps) için kullanılabilir bellek hakkında bilgi için bkz. Bellek ve gecikme süresiyle ilgili dikkat edilmesi gerekenleri yönetme .

Üst düzey uygulamaların aşağıdaki belleğe ve depolamaya erişimi vardır:

  • Üst düzey çekirdekte 256 KiB RAM, tamamen üst düzey uygulama kullanımı için ayrılmıştır. Bu alanın en fazla 1 KiB'ı, üst düzey uygulamaların ve RTApps'in iletişim kuracağı her paylaşılan arabellek kanalı için ayrılmış olabilir.
  • 1 MiB salt okunur flash bellek, üst düzey ve gerçek zamanlı çekirdekler arasında paylaşılır.
  • Bir cihaz yeniden başlatıldığında kalıcı olan okuma/yazma (değiştirilebilir) depolama. Değiştirilebilir depolama hakkında bilgi için bkz. Azure Sphere'de depolamayı kullanma.

Not

Flash'ın tekrar tekrar güncelleştirilmesi sonunda yıpranıyor ve geçersiz hale geliyor. Bu nedenle, flash'ın gereksiz güncelleştirmelerini önlemek için kodunuzu tasarlamanız gerekir. Örneğin, yeniden başlatma işleminden sonra kaydedilen durumu kurtarabilmek için uygulama durumunuzu çıkmadan önce kaydetmek istiyorsanız, uygulamanın durumunu yalnızca durum değiştiyse flash'a kaydetmeyi göz önünde bulundurun.

Flash bellek kullanımını belirleme

Flash bellek kullanımınızı belirlemek için yalnızca görüntü meta verilerini, uygulama bildirimini ve yürütülebilir görüntüyü içeren görüntü paketi dosyasının boyutunu göz önünde bulundurun. Azure Sphere işletim sistemi veya çalışma zamanı hizmetleri ve çevre birimlerini denetleyen ve bir Azure IoT Hub bağlantısını etkinleştiren paylaşılan kitaplıklar gibi Microsoft tarafından sağlanan bileşenlerin gerektirdiği depolamayı hesaba katmak zorunda değilsiniz. Benzer şekilde, uygulamanızın tam yedek kopyasının boyutunu veya bozulma veya havadan güncelleştirmelerle ilgili sorunlar durumunda yük devretmeyi veya geri almayı etkinleştiren bileşenleri eklemeniz gerekmez.

Ancak geliştirme ve hata ayıklama sırasında hata ayıklayıcının boyutu sınıra göre sayılır. Hata ayıklayıcısı azsphere device enable-development tarafından otomatik olarak eklenir ve azsphere device enable-cloud-test tarafından kaldırılır. Microsoft Azure Sphere SDK yükleme dizininin DebugTools klasöründe gdbserver.imagepackage araması yaparak SDK'nız tarafından kullanılan hata ayıklayıcının boyutunu bulabilirsiniz.

Azsphere cihaz dışarıdan yükleme komutu, uygulama görüntüsü paketi ve hata ayıklayıcısı (varsa) 1 MiB toplam sınırını aşarsa bir hata döndürür. Azure Sphere kiracınıza yeni bir görüntü yükleyen azsphere image add --image komutu, görüntü paketi 1 MiB'yi aşarsa da hata döndürür.

256 KiB RAM sınırı yalnızca uygulama için geçerlidir; hata ayıklayıcısı tarafından kullanılan RAM'e izin vermeniz gerekmez. Çekirdek ayırmaları için ek bellek ayrılır.

Mevcut Azure Sphere yongası (MT3620) için yazılmış uygulamalar için kullanılabilir flash ve RAM artabilir (ancak asla azalmaz). Gelecekteki Azure Sphere yongalarının farklı sınırları olabilir.

Yetersiz bellek koşulları

Uygulamanız çok fazla RAM kullanıyorsa, Azure Sphere işletim sistemi bunu bir SIGKILL sinyaliyle sonlandırır. Örneğin, hata ayıklayıcıda aşağıdakileri görürsünüz:

Child terminated with signal = 0x9 (SIGKILL)

Üst düzey bir uygulama SIGTERM isteğini aldıktan sonra çıkılamazsa da SIGKILL sinyali oluşur. Ayrıntılar için bkz. Uygulamanın yaşam döngüsü .

Bellek yetersiz durumundan dolayı uygulamanızda kilitlenmeleri önlemeye yardımcı olmak için üst düzey uygulamalarda RAM kullanımını yönetmeye yönelik en iyi yöntemlere bakın.

Çalışma zamanı uygulaması RAM kullanımını belirleme

Azure Sphere, çalışma zamanında bellek kullanımı bilgilerini almak için çeşitli işlevler sağlar. Bunları kullanarak üst düzey uygulamanızın bellek kullanımını izleyebilir ve bellek kullanımı 256 KiB sınırında belirttiğiniz eşiği aşarsa uygulamanızı güvenli bir şekilde yeniden başlatabilirsiniz. Kullanılabilir işlevler şunlardır:

  • Applications_GetTotalMemoryUsageInKB: Kibibayt cinsinden toplam bellek kullanımını alın. Bu, uygulamanızın veya hata ayıklama sunucusunun (KiB'de) ham değer olarak döndürülen çekirdek ayırmaları (yuvalar için arabellekler gibi) dahil olmak üzere sistemdeki toplam fiziksel bellek kullanımıdır.
  • Applications_GetUserModeMemoryUsageInKB: Kibibayt cinsinden kullanıcı modu bellek kullanımını alın. Bu, doğrudan uygulamanız tarafından kullanılan fiziksel bellek miktarı, kendi adına kitaplıklar tarafından kullanılan bellek ( anon ayırmaları olarak da adlandırılır) ve hata ayıklama sunucusu tarafından kullanılan bellektir ve ham değer olarak döndürülür (KiB'de).
  • Applications_GetPeakUserModeMemoryUsageInKB: Kibibayt cinsinden en yüksek kullanıcı modu bellek kullanımını alın. Bu, geçerli oturumda kullanılan en fazla kullanıcı belleği miktarıdır. Uygulamanızın bellek kullanımını test ederken bu değerin hiçbir zaman 256 KiB'yi aşmadığından emin olmanız gerekir. Uygulamanız her yeniden başlatıldığında veya yeniden dağıtıldığında bu değer sıfırlanır. Uygulamanızın önerilen 256 KiB sınırına ne kadar yaklaştığını yaklaşık olarak görmek için bu işlevi kullanın.

Bu işlevleri üst düzey uygulamanızda kullanmak için applications.h üst bilgi dosyasını ekleyin. Uygulamanızın genel bellek kullanımı hakkında fikir edinmek için geliştirme sırasında bu işlevleri kullanabilirsiniz, ancak bunları alandaki cihazlardan bilgi yakalamak için günlük kaydıyla birlikte de kullanabilirsiniz. Bellek Aşırı Kullanımı Algılama ve Temizleme kod parçacığı, beklenmeyen bellek kullanımını algılamayı ve düzgün bir şekilde işlemeyi gösterir.

Not

Bu işlevler, işletim sistemi tarafından görüldüğü gibi bellek kullanımını döndürür. Şu anda, kullanıcı yığınındaki ayırmalar için bir uygulama tarafından belleğin boşaltılması bu işlevler tarafından bildirilmemiştir. Bellek, gelecekte kullanılmak üzere malloc kitaplığına döndürülür, ancak bellek işletim sistemi tarafından ayrılmadığı ve boşaltılmadığı sürece işletim sistemi tarafından bildirilen istatistikler değişmeden kalır. Bir yuva için bellek ayırma örneği olabilir. Bu nedenle, bu işlevler uygulamanızın en yüksek güvenilirlik için muhafazakar bir şekilde çalışmasına yardımcı olmak için en kötü senaryoları anlamak için kullanışlıdır. Değerler yaklaşıktır ve işletim sistemi sürümleri arasında farklılık gösterebilir.

Yığın bellek ayırma izlemesi ekleme

Statik ve dinamik olarak bağlı kitaplıklar tarafından hangi kullanıcı ve çekirdek ayırmalarının yapıldığını gösteren yığın bellek ayırma izlemesi ekleyerek ek bellek kullanımı bilgileri elde edebilirsiniz. Bu, en etkili şekilde kullanmanıza yardımcı olmak için uygulamanız tarafından belleğin nerede kullanıldığına dair daha ayrıntılı bir resim sağlar. Azure Sphere işletim sistemi sürüm 21.07 veya üzeri ve uygulama çalışma zamanı sürümü (ARV) 10 veya üzeri ile kullanılabilen bu özellik, yalnızca geliştirme özellikli bir cihazda ve yalnızca uygulama hata ayıklayıcı altında çalışmadığında çalışır.

Not

Yığın bellek ayırma izlemesinin düzgün çalışması için bu bölümde açıklanan her iki yapılandırma görevini de tamamlamanız gerekir. Bunu yapamazsanız, derleme sırasında bir uyarı bildirilir ve yığın bellek bilgileri görüntülenmez.

Yığın bellek ayırma izlemeyi etkinleştirmek için iki şey yapmanız gerekir:

  • HeapMemStats özelliğini uygulamanızın app-manifest.json dosyasına ekleyin:

      "Capabilities": {
        "HeapMemStats": true
      },
    
  • Uygulamanızın CMakeLists.txt dosyasındaki komutuna ekleyerek DEBUG_LIB "libmalloc" libmalloc kitaplığını azsphere_target_add_image görüntü paketinize ekleyin:

    azsphere_target_add_image_package(${PROJECT_NAME} DEBUG_LIB "libmalloc")
    

Önemli

Yığın bellek ayırma izlemesi yalnızca geliştirme özellikli cihazlarda çalıştığından, dağıtım için görüntü paketleri oluşturmadan önce bunu uygulamanızdan kaldırmak için aşağıdakileri yapmalısınız:

  • Uygulamanızın app-manifest.json dosyasından '"HeapMemStats": true' satırını silin.
  • Uygulamanızın azsphere_target_add_image_package(${PROJECT_NAME} DEBUG_LIB "libmalloc" CMakeLists.txt dosyasındaki komuttan kaldırınDEBUG_LIB "libmalloc".

Visual Studio performans profil oluşturucuyu kullanma

Visual Studio kullanıyorsanız, uygulama belleği kullanımı hakkında bilgi almak için performans profili oluşturucu özelliğini kullanabilirsiniz. Bu profil oluşturucuyu kullanan bir öğretici için bkz . Öğreticiler/MemoryUsage.

Önkoşullar

Bellek kullanımı profil oluşturucuyu başlatma

  1. Performans ProfiliOluşturucu'da Hata Ayıkla'ya> tıklayın veya Alt+F2 tuşlarına basarak performans profili oluşturucu başlangıç penceresini açın.

    Visual Studio performans profil oluşturucu penceresi

  2. Analiz Hedefi'nin altında Azure Sphere Cihaz Profili Oluşturucu görünmüyorsa Hedefi Seç'i ve ardından Azure Sphere Cihaz Profil Oluşturucu'ya tıklayın.

  3. Kullanılabilir Araçlar'ın altında Azure Sphere Bellek Kullanımı'nın işaretli olduğundan emin olun, ardından Başlat'ı seçerek bellek kullanımı profil oluşturma penceresini açın ve bellek profil oluşturucuyu başlatın.

  4. Uygulamanızı dağıtmanız veya yeniden başlatmanız gerekiyorsa Hata Ayıklama>Olmadan Başlat'ı seçin veya Ctrl+F5 tuşlarına basarak uygulamanızı cihaza dağıtın.

    Önemli

    Uygulamanız için doğru RAM kullanım bilgilerini almak için uygulamanızı [hata ayıklama olmadan başlatmanız](buid-hl-app.md#build-and-deploy-the-application-in- visual-studio-without-debugging) önemlidir. Hata ayıklama sunucusu tarafından tüketilen bellek bildirilen RAM kullanım istatistiklerine dahil edildiğinden uygulamanızın hata ayıklayıcı altında çalıştırılması, ram kullanımının şişirilmesine neden olur.

Bellek kullanımı profil oluşturucu verilerini yorumlama

Bellek kullanımı profil oluşturma penceresi aşağıdakine benzer bir görünüm görüntüler:

Visual Studio bellek kullanımı profil oluşturucu penceresi

Görünümün ortasında bir Azure Sphere Cihazı Fiziksel Bellek grafiği, uygulamanız çalışırken üç farklı satır olarak üç farklı RAM kullanım istatistiği (en yakın KiB'ye gösterilir) çizer:

  • Toplam: Uygulamanız veya hata ayıklama sunucusu adına çekirdek ayırmaları (yuva arabellekleri gibi) dahil olmak üzere sistemdeki uygulamanızın toplam fiziksel bellek kullanımı.
  • Kullanıcı: Doğrudan uygulamanız tarafından kullanılan fiziksel bellek miktarı, herhangi bir kitaplık tarafından kendi adına kullanılan bellek ( anon ayırmaları olarak da adlandırılır) ve hata ayıklama sunucusu tarafından kullanılan bellek.
  • En Yoğun Kullanıcı: Geçerli oturumda kullanılan en fazla kullanıcı belleği miktarı. Uygulamanızın bellek kullanımını test ederken bu değerin hiçbir zaman 256 KiB'yi aşmadığından emin olmanız gerekir. Çekirdek ayırmaları için ek bellek ayrılır. Uygulamanız her yeniden başlatıldığında veya yeniden dağıtıldığında bu değer sıfırlanır.

Grafik ayrıca New Peak olayının oluşumlarını da çizer (üçgenle gösterilir). Bu olay, En Yüksek Kullanıcı bellek kullanımı için yeni bir üst sınır olduğunda gerçekleşir. Olay, ekran okuyucu erişilebilirliği için etkinleştirilir.

Yığın bellek ayırma izlemesini etkinleştirdiyseniz ve uygulamanız hata ayıklayıcısı altında çalışmıyorsa yığın bellek istatistiklerini gösteren ek bir grafik görürsünüz:

  • Toplam Yığın: Statik ve dinamik kitaplıklar dahil olmak üzere uygulamanız tarafından veya uygulama adına ayrılan toplam yığın belleği.
  • Paylaşılan Kitaplık Yığını: Azure Sphere işletim sistemi tarafından sağlanan dinamik bağlantılı kitaplıklardan ayırmalar.

Visual Studio yığın bellek kullanımı

Grafiklerin üzerinde, uygulamanızın çalışma süresini aşağıdaki grafikteki verilerle ilişkilendirilmiş bir zaman çizelgesi görünümü görüntüler. Belirli zaman aralıklarına odaklanmak için Yakınlaştır ve Uzaklaştır'ı kullanın.

Grafiklerin altında, tablo görünümü aynı bellek istatistiklerini ve olaylarını görüntüler.

Ipucu

Tablodan panoya veri kopyalamak için Ctrl+A tuşlarına basarak tüm satırları seçin ve ardından Ctrl+C tuşlarına basın.

Bu bölümde gösterilen ilk iki grafik, bellek sızıntısı içeren Bellek Kullanımı öğreticisinin 1. Aşaması çalıştırılırken alınmıştır. Bellek kullanımı her grafikte monoton olarak tırmanarak sızıntı için görsel kanıt sağlar. Bellek Kullanımı öğreticisinin 2. Aşamasında olduğu gibi sızıntı düzeltildiğinde bellek ayrıldığında ve serbest bırakıldığında grafik yükselir ve düşer.

Bellek sızıntısı olmadan Visual Studio yığın bellek kullanımı

Toplam bellek kullanımıyla ilgili istatistikleri görüntüleme

azsphere device app show-memory-stats komutu, ekli bir cihazda çalışan uygulamalar için toplam bellek kullanımı, kullanıcı modu kullanımı ve en yüksek kullanıcı modu kullanımıyla ilgili bellek kullanım istatistiklerini döndürür. Cihazın appDevelopment cihaz özelliği bu komutu çalıştıracak şekilde yapılandırılmış olmalıdır.

Uygulamanız çalışırken görüntülenen RAM kullanım istatistikleri şunlardır:

  • Toplam (Çekirdek + Kullanıcı Modu): Uygulamanız veya hata ayıklama sunucusu adına çekirdek ayırmaları (yuva arabellekleri gibi) dahil olmak üzere uygulamanızın sistemdeki toplam fiziksel bellek kullanımı.
  • Kullanıcı Modu: Uygulamanız tarafından doğrudan kullanılan fiziksel bellek miktarı, kendi adına kitaplıklar tarafından kullanılan bellek ( anon ayırmaları olarak da adlandırılır) ve hata ayıklama sunucusu tarafından kullanılan bellek.
  • En Yüksek Kullanıcı Modu: Geçerli oturumda kullanılan en fazla kullanıcı belleği miktarı. Uygulamanızın bellek kullanımını test ederken bu değerin hiçbir zaman 256 KiB'yi aşmadığından emin olmanız gerekir. Çekirdek ayırmaları için ek bellek ayrılır. Uygulamanız her yeniden başlatıldığında veya yeniden dağıtıldığında bu değer sıfırlanır.

Yığın bellek ayırma izlemesini etkinleştirdiyseniz ve uygulamanız hata ayıklayıcısı altında çalışmıyorsa, yığın belleği istatistiklerinin ek satırlarını görürsünüz:

  • Yığın: Uygulama + Statik Kitaplıklar: Kodunuzdan ve statik olarak bağlı kitaplıklardan çekirdek ve kullanıcı ayırmaları.
  • Yığın: <dinamik kitaplık ayırmaları>: Azure Sphere işletim sistemi tarafından sağlanan tek tek dinamik bağlantılı kitaplıklardan ayırmalar.

Bellek kullanımının sürekli izlenmesi

Zaman içinde bellek kullanımını izlemek için betikleri kullanarak azsphere device app show-memory-stats komutunu aşağıdaki örneklerde açıklandığı gibi döngüde çalıştırabilirsiniz:

Windows Komut İstemi

Not Defteri'ni veya başka bir metin düzenleyicisini kullanarak, aşağıdaki içeriğe sahip memuse.bat bir toplu iş betiği dosyası oluşturun:

@echo off

:loop
call azsphere device app show-memory-stats
choice /d y /t 1 > nul
goto loop

Komut istemine adını (veya geçerli dizinde değilse dosyanın tam yolunu) yazarak batch betiğini çalıştırın:

C:\Users\username> memuse.bat
 -------------------------- -------------
 Name                       Usage (bytes)
 ========================================
 Total (Kernel + User Mode) 65536
 -------------------------- -------------
 User Mode                  36864
 -------------------------- -------------
 Peak User Mode             36864
 -------------------------- -------------
 -------------------------- -------------
 Name                       Usage (bytes)
 ========================================
 Total (Kernel + User Mode) 65536
 -------------------------- -------------
 User Mode                  36864
 -------------------------- -------------
 Peak User Mode             36864
 -------------------------- -------------

Betikten çıkmak için Komut İstemi penceresine Ctrl+C yazın, ardından "Toplu işi sonlandırın mı?" istemine Y yanıtını verin.

Windows PowerShell

while ($true) {
    azsphere device app show-memory-stats
    Start-Sleep -Seconds 1
}

Bellek kullanımı ve hata ayıklayıcı

Uygulamanızı hata ayıklayıcı altında çalıştırırken, bildirilen bellek istatistikleri hata ayıklama sunucusu işleminin bellek kullanımını ve hata ayıklamanın neden olduğu kesme noktalarını ayarlama gibi diğer ek bellek kullanımını da içerir. Bu nedenle, doğru bellek istatistiklerini toplamaya çalışırken uygulamanızı her zaman hata ayıklamadan çalıştırmanız gerekir.

Ancak, uygulamanızı hata ayıklayıcısıyla çalıştırırsanız bellek kullanımı profil oluşturucusunu kullanmak yararlı olabilir. Bellek tüketimindeki göreli değişiklikleri gözlemlerken kesme noktalarının ayarlanması ve kod satırlarında adımlanması, bellek kullanımı ani artışlarının veya bellek sızıntılarının nedenlerini belirlemek için kullanışlı bir teknik olabilir.

Visual Studio'da hata ayıklama sırasında Performans Profili Oluşturucu otomatik olarak açılır ancak yığın bellek ayırma izlemesini görüntülemez.