Peta dunia

 

EN: Read in English

Dunia D6: Di Sebalik Tabir

cgroups: apa yang ia boleh guna

Anda akan belajar: cara cgroups hadkan memori, CPU dan bilangan proses container, dan apa jadi bila sampai had.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Satu bekas ada kebocoran memori. Ia makan dan terus makan. Laptop anda ada 16 GB. Apa jadi pada bekas yang lain?

Pilih satu jawapan.

Tengok

Hidupkan ketiga-tiga had. Tengok panel Had.

Apa yang ia boleh guna (cgroup)

  • Had

    Memori
    Tiada had: semua 16 GB
    CPU
    Tiada had: semua 8 CPU
    Proses
    Tiada had

Linux ada had catuan yang dipanggil cgroup: Had catuan: berapa banyak memori, CPU dan proses yang container boleh guna.. Satu cgroup (kumpulan kawalan) hadkan memori, CPU atau bilangan proses.

Cuba

Beri nginx baharu, web, catuan 256 MB. Kemudian semak dengan docker stats --no-stream.

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • nginx:1.30-alpine8 layer · 93.5MB
  • node:24-alpine4 layer · 244MB

0 container (0 berjalan), 3 image, 0 loker.

Teka

Aplikasi itu terus makan memori, jauh melepasi hadnya. Apa Linux buat?

Pilih satu jawapan.

Semak

bash
docker run --name hog --memory 32m --memory-swap 32m alpine:3.22 tail /dev/zero
echo $?
137
docker inspect -f '{{.State.OOMKilled}}' hog
true
docker rm hog
hog
Output sebenar pada Docker 29: container dengan had 32 MB makan memori, keluar dengan kod 137, dan inspect kata OOMKilled true.

Output sebenar. tail /dev/zero makan memori tanpa henti. Kod keluar 137 maksudnya “dibunuh”. OOMKilled maksudnya kehabisan memori: ia sampai hadnya.

Semak

Namespace atau cgroup? Susun setiap satu.

Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.

      Anda berjaya!

      Kini anda boleh hadkan apa yang container boleh guna.

      Nak tahu lebih (pilihan)

      Docker sentiasa letak container dalam cgroup sendiri, tapi tiada had kecuali diminta. Dengan cgroup v2, had disimpan dalam fail: memory.max, cpu.max, pids.max. Had CPU cuma lambatkan bekas. Ia tak pernah bunuhnya. Guna tail /dev/zero hanya dengan had memori!

      Misi sebenar

      1. docker run -d --name web --memory 256m --cpus 0.5 --pids-limit 100 nginx:1.30-alpine
      2. docker stats --no-stream web
      3. docker rm -f web

      0 daripada 3 langkah siap · Tanda anda disimpan.