Bu sayfada, Bazel'in kullandığı belleğin nasıl sınırlandırılacağı ve azaltılacağı açıklanmaktadır.
Bazel'i sınırlı RAM ile çalıştırma
Bazı durumlarda Bazel'in minimum bellek kullanmasını isteyebilirsiniz. Başlangıç işareti --host_jvm_args
ile maksimum yığını --host_jvm_args=-Xmx2g
gibi ayarlayabilirsiniz.
Artımlı derleme hızını bellek için takas etme
Derlemeleriniz çok büyükse Bazel, yeterli belleğe sahip olmadığında OutOfMemoryError
(OOM) hatası verebilir. Aşağıdaki komut işaretlerini ileterek Bazel'in daha az bellek kullanmasını sağlayabilirsiniz. Bu durumda, artımlı derlemeler daha yavaş gerçekleşir:
--discard_analysis_cache
,
--nokeep_state_after_build
,
ve
--notrack_incremental_state
.
Bu işaretler, gelecekteki derlemelerin standart bir artımlı derlemeye göre daha yavaş olması pahasına Bazel'in bir derlemede kullandığı belleği en aza indirir.
Bu işaretlerden herhangi birini tek tek de iletebilirsiniz:
--discard_analysis_cache
, yürütme sırasında kullanılan belleği (analiz sırasında değil) azaltır. Artımlı derlemelerde paket yükleme işleminin yeniden yapılması gerekmez ancak analiz ve yürütme işlemlerinin yeniden yapılması gerekir (ancak diskteki işlem önbelleği, yeniden yürütmenin büyük bir kısmını engelleyebilir).--notrack_incremental_state
, Bazel'in dahili bağımlılık grafiğinde herhangi bir kenarı depolamadığı için artımlı derlemelerde kullanılamaz. Bir sonraki derlemede bu veriler atılır ancak--nokeep_state_after_build
belirtilmediği sürece dahili hata ayıklama için o zamana kadar korunur.--nokeep_state_after_build
, derlemeden sonra tüm verileri siler. Bu nedenle, artımlı derlemelerin sıfırdan oluşturulması gerekir (disk üzerindeki işlem önbelleği hariç). Tek başına, mevcut derlemenin en yüksek değerini etkilemez.
Skyfocus ile bellek için esneklik oluşturma (Deneysel)
Bazel'in daha az bellek kullanmasını ve artımlı derleme hızlarını korumasını istiyorsanız Bazel'e değiştireceğiniz dosyaların çalışma kümesini söyleyebilirsiniz. Bazel, bu dosyalarda yapılan değişiklikleri doğru şekilde artımlı olarak yeniden derlemek için gereken durumu korur. Bu özelliğin adı Skyfocus'tır.
Skyfocus'u kullanmak için --experimental_enable_skyfocus
işaretini iletin:
bazel build //pkg:target --experimental_enable_skyfocus
Varsayılan olarak, çalışma kümesi oluşturulan hedefin yanındaki dosya kümesi olur. Örnekte, //pkg
içindeki tüm dosyalar çalışma kümesinde tutulur ve bazel clean
komutunu verene veya Bazel sunucusunu yeniden başlatana kadar çalışma kümesi dışındaki dosyalarda değişiklik yapılmasına izin verilmez.
Tam bir dosya veya dizin grubu belirtmek istiyorsanız aşağıdaki gibi --experimental_working_set
işaretini kullanın:
bazel build //pkg:target --experimental_enable_skyfocus
--experimental_working_set=path/to/another/dir,path/to/tests/dir
Bellek azaltma miktarını göstermek için --experimental_skyfocus_dump_post_gc_stats
değerini de iletebilirsiniz:
Tüm bunları bir araya getirdiğinizde aşağıdaki gibi bir sonuç görürsünüz:
$ 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ıldığında Bazel'in 561 MB (%45) bellek düşürmesine izin verildi. Ayrıca, dir1
, dir2
ve dir3/subdir
altındaki dosyalarda yapılan değişiklikleri işleyen artımlı derlemeler, bu dizinlerin dışındaki değiştirilen dosyaları Bazel'in yeniden oluşturamaması karşılığında hızlı çalışmaya devam edecek.
Bellek kullanımının profilini çıkarma
Bazel, kuralınızın bellek kullanımını kontrol etmenize yardımcı olabilecek yerleşik bir bellek profil oluşturucuyla birlikte gelir. Bu süreç hakkında daha fazla bilgi edinmek için özel kuralların performansını artırma ile ilgili dokümanımızın Bellek Profil Oluşturma bölümünü inceleyin.