Belleği Optimize Et

Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfada, Bazel'in kullandığı belleğin nasıl sınırlandırılacağı ve azaltılacağı açıklanmaktadır.

Sınırlı RAM ile Bazel çalıştırma

Bazı durumlarda, Bazel'in minimum bellek kullanmasını isteyebilirsiniz. Bu ayarı, başlangıç işareti aracılığıyla maksimum yığın --host_jvm_args --host_jvm_args=-Xmx2g gibi.

Bellek için artımlı derleme hızlarını değiştirin

Derlemeleriniz çok büyükse Bazel aşağıdaki durumlarda OutOfMemoryError (OOM) hatası verebilir sahip olmadığı anlamına gelir. Daha az ödeyerek Bazel'ın daha az bellek kullanmasını sağlayabilirsiniz. daha yavaş artımlı derlemelerinin sayısını artırır: --discard_analysis_cache --nokeep_state_after_build, ve --notrack_incremental_state.

Bu işaretler, Bazel'in derlemede kullandığı belleği en aza indirir. gelecekteki derlemelerin daha yavaş yapılmasını sağlar.

Ayrıca, bu işaretlerden herhangi birini tek tek de iletebilirsiniz:

  • --discard_analysis_cache, yürütme sırasında kullanılan belleği azaltır ( analizi). Artımlı derlemelerde paket yüklemeyi yeniden yapması gerekmez analizi ve yürütmeyi yeniden yapmanız gerekir (ancak disk üzerindeki işlem önbelleği birçok yeniden yürütmeyi önler).
  • --notrack_incremental_state, Bazel'in dahili öğesindeki kenarları depolamaz ve artımlı derlemelerde kullanılamaz. Sonraki derleme bu verileri siler ancak dahili hata ayıklama için o zamana kadar korunur. (--nokeep_state_after_build belirtilmediği sürece)
  • --nokeep_state_after_build, derleme işleminden sonra tüm verileri silecek. artımlı derlemelerin sıfırdan yapılması gerekir (disk üzerinde işlem önbellek). Tek başına bu, mevcut derlemenin yüksek su seviyesini etkilemez.

Skyfocus ile bellek için derleme esnekliğini takas edin (Deneysel)

Bazel'in daha az bellek kullanmasını ve artımlı derleme hızlarını korumasını istiyorsanız Bazel'a değiştirmek istediğiniz çalışan dosya grubunu söyleyebilir ve Bazel yalnızca bu dosyalarda da yer alır. Bu özelliğe Skyfocus adı verilir.

Skyfocus özelliğini kullanmak için --experimental_enable_skyfocus işaretini iletin:

bazel build //pkg:target --experimental_enable_skyfocus

Varsayılan olarak, çalışma grubu, oluşturulan hedefin yanındaki dosya kümesidir. geliştirmenizi sağlar. Örnekte, //pkg alanındaki tüm dosyalar çalışma kümesinde tutulur ve çalışma grubunun dışındaki dosyalarda yapılan değişikliklere izin verilmez. Bu işlem, bazel clean veya Bazel sunucusunu yeniden başlatın.

Bir dosya veya dizin grubunu tam olarak belirtmek istiyorsanız --experimental_working_set işaretini seçin. Örneğin:

bazel build //pkg:target --experimental_enable_skyfocus
--experimental_working_set=path/to/another/dir,path/to/tests/dir

Dilerseniz --experimental_skyfocus_dump_post_gc_stats ayarını da iletebilirsiniz. bellek azaltma miktarı:

Tüm bunları özetlersek şuna benzer bir sonuç görmeniz gerekir:

$ bazel test //pkg:target //tests/... --experimental_enable_skyfocus --experimental_working_set dir1,dir2,dir3/subdir --experimental_skyfocus_dump_post_gc_stats
INFO: --experimental_enable_skyfocus is enabled. Blaze will reclaim memory not needed to build the working set. Run 'blaze dump --skyframe=working_set' to show the working set, after this command.
WARNING: Changes outside of the working set will cause a build error.
INFO: Analyzed 149 targets (4533 packages loaded, 169438 targets configured).
INFO: Found 25 targets and 124 test targets...
INFO: Updated working set successfully.
INFO: Focusing on 334 roots, 3 leafs... (use --experimental_skyfocus_dump_keys to show them)
INFO: Heap: 1237MB -> 676MB (-45.31%)
INFO: Elapsed time: 192.670s ...
INFO: Build completed successfully, 62303 total actions

Bu örnekte, Skyfocus kullanımı, Bazel'in bellekten 561 MB (%45) ve dir1, dir2 ve altındaki dosyalarda yapılan değişiklikleri işlemek için artımlı derlemeler dir3/subdir yüksek hızını korurken Bazel'in bunu yapamayacağı da bir töz var Değiştirilen dosyaları bu dizinlerin dışında yeniden oluşturma

Bellek Kullanımı Profilleme

Bazel, kuralınızın verilerini kontrol etmenize yardımcı olabilecek yerleşik bir bellek profil oluşturucusuyla birlikte gelir. bazı işaretler vardır. Bu süreç hakkında daha fazla bilgiye şuradan ulaşabilirsiniz: Bellek Profili Oluşturma özel kuralların performansını artırma ile ilgili dokümanlar.