docker

Docker: Konteyner RAM ve CPU Kullanımı Nasıl Kontrol Edilir

Docker CPU ve bellek kullanımı nasıl kontrol edilir?  Bu eğitimde Docker konteyner RAM ve CPU kullanımını nasıl kontrol edeceğinizi öğreneceksiniz.  Tıpkı Linux/Windows sistemlerinizdeki kaynak kullanımını nasıl izleyeceğiniz/kontrol edeceğiniz gibi, konuşlandırdığınız Docker konteynerlerinin her birinin ne kadar RAM veya CPU yüzdesi tükettiğini de kontrol etmek mümkündür.  Bu, ana sunucunuzun kaynak kapasitesini önceden planlamanıza olanak tanır.

Docker Konteyner RAM ve CPU Kullanımını Kontrol Etme

Peki Docker konteyner RAM ve CPU kullanımını nasıl kontrol edebilirsiniz?  Docker, konteynerlerin çalışma zamanı ölçümlerinin canlı akışını kolayca görüntülemenizi sağlayan bir istatistik komut seçeneğiyle birlikte gelir.

Komut;

docker stats

Liman işçisi istatistikleri, CPU ve bellek kullanım istatistiklerinin yanı sıra konteyner bellek sınırını ve ağ IO ölçümlerini de gösterebilir.

docker stats komut satırı kullanımı

Komut kullanımı yardımını görmek için şunu çalıştırın;

docker stats --help
Usage:  docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output

Docker Containers Genel Metriklerini Göster

Basit kullanımında, tüm konteynerlerin çalışma zamanı ölçümlerini görüntüleme seçeneği olmadan komutu kolayca çalıştırabilirsiniz!

docker stats

Komut, tıpkı top/htop komutları gibi kapsayıcıların çalışma zamanı ölçümlerinin canlı akışını görüntüler.

Örnek çıktı;

CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b46dce1fc33c   dozzle              0.00%     4.582MiB / 1.929GiB   0.23%     7.89kB / 2.42kB   0B / 0B           8
1421e6e27733   nagios-core-4.4.9   0.04%     31.03MiB / 1.929GiB   1.57%     26.6kB / 44.7kB   75.8MB / 8.22MB   13

–no-stream seçeneğini geçerek canlı ekranı devre dışı bırakabilirsiniz.  Bu, komutu çalıştırdığınız ve çıktığınız andaki konteyner ölçümlerini gösterecektir;

docker stats --no-stream

Peki komut çıktısının sütunları ne anlama geliyor?

CONTAINER IDKonteyner kimliğini gösterir
NameKonteynerin adını gösterir
CPU %Konteynerin kullandığı ana bilgisayar CPU’sunun yüzdesini gösterir
MEM %Konteynerin kullandığı ana bilgisayar RAM’inin yüzdesini gösterir
MEM USAGE / LIMITKabın kullandığı toplam RAM miktarını ve kullanmasına izin verilen toplam RAM miktarını gösterir
NET I/OKonteynerin ağ arayüzü üzerinden gönderdiği ve aldığı veri miktarını gösterir
BLOCK I/OKonteynerin ana bilgisayardaki blok cihazlardan okuduğu ve yazdığı veri miktarını gösterir
PIDsKapsayıcının ilgili kapsayıcı içinde oluşturduğu işlem veya iş parçacığının sayısını gösterir

Belirli Docker Container’ın Kaynak Kullanımını Gösterme

Docker istatistikleri komutunu kullanarak belirli Docker kapsayıcısının kaynak kullanımını göstermek için, komuta Docker kapsayıcısı adını veya kimliğini eklemeniz yeterlidir;

docker stats [container_ID|container_NAME]

Örneğin;

docker stats dozzle

Aynı komutta birden fazla konteyner;

docker stats dozzle nagios-core-4.4.9

Veya;

docker stats b46dce1fc33c

Birden fazla konteyner kimliği;

docker stats b46dce1fc33c 1421e6e27733

Belirli Docker Konteynerinin Özel Kaynak Kullanımını Göster

Çıktıyı bir Go şablonu kullanarak yazdıran –format seçeneğini kullanarak belirli bir kapsayıcı için CPU %’si veya RAM vb. gibi belirli kaynak kullanımını da gösterebilirsiniz.

–format seçenekleri, görüntülenen her metrik için ilgili bir yer tutucuya sahiptir;

PlaceholderDescription
.ContainerKapsayıcı adı veya kimliği (kullanıcı girişi)
.NameKonteyner adı
.IDContainer ID
.CPUPercCPU yüzdesi
.MemUsageHafıza kullanımı
.NetIOAğ GÇ
.BlockIOBlok IO
.MemPercBellek yüzdesi (Windows’ta mevcut değildir)
.PIDsPID Sayısı (Windows’ta mevcut değildir)

–format seçeneğini şu şekilde kullanırsınız;

docker stats --format "{{.Container}}[delimeter]{{.Placeholder-1}}[delimeter]{{.Placeholder-2}}"
  • [sınırlayıcı] herhangi bir şey olabilir, boşluk ( ), sekme (\t), dikey çizgi (|), virgül (,), iki nokta üst üste (:) vb.
  • {{.Placeholder-N}} yukarıdaki yer tutuculardan herhangi biri olabilir

Tüm konteynerlerin CPU kullanımını görüntülemek için;

docker stats --format "{{.Container}} {{.CPUPerc}}" --no-stream

Örnek çıktı;

b46dce1fc33c 0.00%
1421e6e27733 0.04%

Spesifik konteyner için;

docker stats --format "{{.Container}} {{.CPUPerc}}" --no-stream <container-name|ID>

Örneğin;

docker stats --format "{{.Container}} {{.CPUPerc}}" --no-stream dozzle

Örnek çıktı;

dozzle:0.00%

Gördüğünüz gibi sonuç boşluk sınırlayıcıyla ayrılmıştır.  Ancak sütun başlığı adı yoktur.

Sütunların adlarını göstermek için tablo seçeneğini komuta iletin;

docker stats --format "table {{.Container}}[delimeter]{{.Placeholder-1}}[delimeter]{{.Placeholder-2}}"

Örneğin, CPU kullanımının sekmeyle ayrılmış sonuçlarını göstermek için, tüm kapsayıcıların RAM Kullanımı;

docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemPerc}}"

Örnek çıktı;

CONTAINER      CPU %     MEM %
b46dce1fc33c   0.00%     0.23%
1421e6e27733   0.02%     1.58%

İstatistik çıktısında kapsayıcı kimliğini veya Adını görüntülemek istemiyorsanız, {{.Container}} seçeneğini atlayın;

docker stats --format "{{.MemPerc}}" <container-name|ID>

Örneğin

docker stats --no-stream --format "{{.MemPerc}}" dozzle

Örnek çıktı;

0.23%

Pseudofiles’tan Docker Container Kaynak Kullanımını Göster

Ayrıca Docker konteyner metriklerini Pseudo-filesystems aracılığıyla açığa çıkan kontrol gruplarından da kontrol etmek mümkündür.  Kontrol grupları, Docker konteyner ana bilgisayar sisteminde /sys/fs/cgroup dizini altında bulunur.

Her belirli Docker kapsayıcısı için bellek, CPU, blok G/Ç ile ilgili metrik, /sys/fs/cgroup/system.slice/ altında sırasıyla Memory.stat, cpu.stat, io.stat gibi sahte dosyalar aracılığıyla gösterilir. docker-LONG_CONTAINER_ID.scope/ dizini

Uzun Docker konteyner kimliklerini almak için;

docker ps --no-trunc --format "{{.Names}}\t{{.ID}}"

Örnek çıktı;

dozzle	b46dce1fc33c05232120a8b317785b13aaf749728e70a17cb3d4c32366ad4c77
nagios-core-4.4.9	1421e6e27733bf9c60378fe5b435528bfbe33af75c2b0abd2500a2281eb2a4f8

Böylece, örneğin bireysel konteyner metriklerini alabilirsiniz;

cat /sys/fs/cgroup/system.slice/docker-b46dce1fc33c05232120a8b317785b13aaf749728e70a17cb3d4c32366ad4c77.scope/cpu.stat
usage_usec 466029
user_usec 425019
system_usec 41009
nr_periods 0
nr_throttled 0
throttled_usec 0
cat /sys/fs/cgroup/system.slice/docker-b46dce1fc33c05232120a8b317785b13aaf749728e70a17cb3d4c32366ad4c77.scope/memory.stat
anon 4370432
file 0
kernel_stack 131072
pagetables 98304
percpu 72
sock 0
shmem 0
file_mapped 0
file_dirty 0
file_writeback 0
swapcached 0
anon_thp 0
file_thp 0
shmem_thp 0
inactive_anon 4366336
active_anon 4096
inactive_file 0
active_file 0
unevictable 0
slab_reclaimable 71688
slab_unreclaimable 124968
slab 196656
workingset_refault_anon 0
workingset_refault_file 0
workingset_activate_anon 0
workingset_activate_file 0
workingset_restore_anon 0
workingset_restore_file 0
workingset_nodereclaim 0
pgfault 3029
pgmajfault 0
pgrefill 0
pgscan 0
pgsteal 0
pgactivate 0
pgdeactivate 0
pglazyfree 0
pglazyfreed 0
thp_fault_alloc 0
thp_collapse_alloc 0

İşte Docker konteyner RAM’i ve CPU kullanımının nasıl kontrol edileceği ile ilgili konu budur.

Yazının orijinalini buradan okuyabilirsiniz.