Docker kapsayıcıları için kullanılabilir bellek-stres testi aracı stresi nasıl sınırlanır

Genel Bakış

Varsayılan olarak, kapsayıcı tarafından kullanılan kaynaklar sınırsızdır. Yani, ana bilgisayar çekirdeği zamanlayıcısının izin verdiği maksimum kaynaklar kullanılabilir. Ancak konteyneri kullanma sürecinde, konteynerin konak kaynaklarını kısıtlama olmaksızın kullanması imkansızdır.Aşağıda Docker konteynerinde mevcut olan hafızanın nasıl sınırlandırılacağı açıklanmaktadır.

Konteyner tarafından bellek kullanımı neden kısıtlansın?

Kapsayıcının ana bilgisayarın belleğini aşırı kullanımını sınırlamak çok önemlidir. Linux ana bilgisayarı için, çekirdek ayırmak için yeterli bellek olmadığını tespit ettiğinde, bir OOME (Anı Dışı İstisnası) atacak ve bellek alanını boşaltmak için bazı işlemleri sonlandırmaya başlayacaktır.

Burada, çok sayıda konteynerin ana bilgisayarın belleğini tükettiği daha yaygın bir senaryoyu ele alıyoruz.OOME tetiklendikten sonra, sistem çekirdeği belleği serbest bırakmak için işlemi hemen sonlandırmaya başlar. Ya çekirdek tarafından öldürülen ilk süreç docker daemon ise? Sonuç, tüm kapların çalışmamasıdır!

Bu soruna yanıt olarak docker, docker daemon'un OOM önceliğini ayarlayarak sorunu hafifletmeye çalışır. Çekirdek, öldürülmek üzere işlemi seçtiğinde, tüm süreçleri puanlayacak, doğrudan en yüksek puana sahip süreci ve ardından bir sonrakini öldürecektir. Docker daemon'unun OOM önceliği düşürüldüğünde (konteyner sürecinin OOM önceliğinin ayarlanmadığını unutmayın), docker daemon sürecinin puanı sadece konteyner sürecinin puanından düşük olmayacak, aynı zamanda diğer bazı işlemlerin puanlarından da daha düşük olacaktır. Bu şekilde docker daemon süreci çok daha güvenlidir.

Aşağıdaki komut dosyası aracılığıyla mevcut sistemdeki tüm işlemlerin puanlarına sezgisel olarak bakabilirsiniz:

#! / bin / bash $ (find / proc -maxdepth 1 -regex '/ proc / +') içindeki proc için; printf "% 2d% 5d% s \ n" \ "$ (cat $ proc / oom_score)" \ "$ (taban adı $ proc)" \ "$ (cat $ proc / cmdline | tr '\ 0' '' | head -c 50)" tamamlandı 2 > / dev / null | sırala -nr | kafa -n 40

Bu komut dosyası, en yüksek puanlara sahip 40 işlemi çıkarır ve bunları sıralar (ilk sütun işlemlerin puanlarını gösterir)

Stres test aracı stresi

Kabın bellek kullanımını test etmek için stres testi iş stresini yükledim ve yeni bir u-stresi görüntüsü oluşturdum.

Aşağıda kullanılan tüm kaplar u-stres görüntüleri tarafından oluşturulacaktır (kabı çalıştıran ana makine ubuntu16.04'tür). U-stres görüntüsünü oluşturmak için Dockerfile'ı burada bulabilirsiniz:

Ubuntu'DAN: en yeni RUN apt-get update \ apt-get install stress

Bir ayna oluşturma komutu şudur:

docker build -t u-stress: en son.

Bellek kullanımının üst sınırını sınırlayın

Önce basit bir kullanım senaryosunu tamamlayın: kabın kullanabileceği maksimum belleği 300 M ile sınırlayın.

-M (- memory =) seçeneği bu yapılandırmayı tamamlayabilir:

$ docker run -it -m 300M --memory-swap -1 --name con1 u-stress / bin / bash

Aşağıdaki stres komutu bir işlem oluşturacak ve malloc işlevi aracılığıyla bellek ayıracaktır:

# stres --vm 1 --vm-bayt 500 milyon

Docker stats komutuyla gerçek durumu kontrol edin:

Yukarıdaki docker run komutunda, -m seçeneği konteyner tarafından kullanılan belleği 300M ile sınırlar. Aynı zamanda, bellek takas değerini -1 olarak ayarlayın; bu, kapsayıcı programı tarafından kullanılan belleğin sınırlı olduğu ve kullanılabilecek takas alanının sınırlı olmadığı anlamına gelir (ana bilgisayar, olduğu kadar takas kabı kullanabilir).

Aşağıda stres süreci belleğinin gerçek durumunu görüntülemek için top komutunu kullanıyoruz:

Yukarıdaki ekran görüntüsünde, önce stres komutuyla ilgili işlemleri sorgulamak için pgrep komutunu kullanın. İşlem numarası daha büyük olan (9296) hafızayı tüketen işlemdir, bu yüzden hafıza bilgisine bakalım. VIRT, işlem sanal belleğinin boyutudur, bu nedenle 500M olmalıdır. RES, ayrılan gerçek fiziksel bellek miktarıdır.Bu değerin 300M civarında dalgalandığını görüyoruz.

Sonuç: kabın kullanabileceği fiziksel bellek miktarını başarıyla sınırladı.

Mevcut takas boyutunu sınırlayın

Vurgulamak --memory-swap İle olmalı --hafıza Birlikte kullanılır.

Normal koşullar altında, --memory-swap değeri konteyner için kullanılabilir bellek ve takas değerini içerir. Yani --memory = "300m" --memory-swap = "1g" şu anlama gelir:

Konteyner 300M fiziksel bellek kullanabilir ve 700M (1G -300M) takas kullanabilir.

--memory-swap, konteynerin kullanabileceği fiziksel bellek ile kullanılabilecek takasın toplamıdır!

--Memory-swap değerini 0 olarak ayarlamak, ayarlamamakla aynıdır.Bu durumda, --memory ayarlanırsa, kabın kullanabileceği takas boyutu --memory değerinin iki katıdır.

--Memory-swap'in değeri --memory ile aynıysa, kapsayıcı swap kullanamaz.

Aşağıda, takas mümkün olmadığında sistemden büyük miktarda bellek isteme senaryosu gösterilmektedir:

$ docker run -it --rm -m 300M --memory-swap = 300M u-stress / bin / bash # stres --vm 1 --vm-bayt 500 milyon

Kapta bulunan fiziksel belleği sınırlandırarak, kapsayıcıdaki hizmet istisnaları nedeniyle büyük miktarda ana bilgisayar belleğinin tüketildiği bir durumdan kaçınmak mümkündür (bu durumda, kabı yeniden başlatmak daha iyi bir stratejidir), böylece ana bilgisayar belleğinin tükenme riskini azaltır.

Daha sonra daha fazla devop paylaşılacak, ilgilenen arkadaşlar buna dikkat edebilir! !

Kız kardeşim mutlu! Wu Yifan konser biletleri almak için Xiaomi Note3 satın alın! Netizen: Yine erken aldım
önceki
Apple AppStore, ödeme yapmak için WeChat'i kullanabilir!
Sonraki
Rem kadar popüler olan hizmetçi, sekiz paketli gururlu bir karın kasına sahip, ancak metresi baş ağrısı yapıyor
İnanılmaz Lei Jun! Küresel akıllı telefon satışları yavaş ve Xiaomi, en iyilerinden biri olan ilerlemeye devam ediyor!
Oracle performans optimizasyonu: yüksek su işaretinin (HWM) ayrıntılı açıklaması - HWM'nin nasıl hesaplanacağı
Jailbreak eklentisi: Albümü daha akıllı hale getirin ve fotoğrafları otomatik olarak kategorilere ayırın!
Beş resim, düşük voltajlı güç dağıtım sistemlerinde IT, TT ve TN topraklamasını tanımlamanıza izin verir!
Oracle'da taşıma yürütme mekanizmasını açıklayın + taşıma işlemi aracılığıyla HWM boyutunu azaltın
iOS11 nihai beta sürümü yayınlandı, yükseltecek misiniz?
Üç yıllık dönüşüm başarısı: Runhe, çipten uygulamaya kapalı döngü tam yığın IOT yeteneğini gerçekleştiriyor
Elektrikli sürüklemeyi öğrenmek zor mu? Elektrikli sürücü kontrol devresi şemasının özetine bakın!
İPhone SE2'nin son haberleri, gelişme yok, milenyum modeli, meyve hayranları hayal kırıklığını dile getirdi!
Ui-gun konuşmuyor, bunun bir erkek araştırmacı olduğunu söylemek zor ve anime endüstrisinde cinsiyeti ayırt etmesi zor olan başka bir yüz
Crazy Hybrid: Vahşi dağ yoluna tırmanmak her şeye kadir | Bilim ve Teknoloji
To Top