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.
Petunjuk
--memory 256m tetapkan had. docker stats --no-stream tunjuknya sekali.Teka
Aplikasi itu terus makan memori, jauh melepasi hadnya. Apa Linux buat?
Pilih satu jawapan.
Semak
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
docker run -d --name web --memory 256m --cpus 0.5 --pids-limit 100 nginx:1.30-alpinedocker stats --no-stream webdocker rm -f web
0 daripada 3 langkah siap · Tanda anda disimpan.
English
One lunchbox has a memory leak. It eats and eats. Your laptop has 16 GB. What happens to the other lunchboxes?
Linux has portion limits called cgroups. A cgroup caps memory, CPU or the number of processes.
Give a new nginx, web, a 256 MB portion. Then check it with docker stats --no-stream.
--memory 256m sets the cap. docker stats --no-stream shows it once.The app keeps eating memory, far past its cap. What does Linux do?
Real output. tail /dev/zero eats memory forever. Exit code 137 means “killed”. OOMKilled means out of memory: it hit its cap.
Namespace or cgroup? Sort each one.
You can now cap what a container may use.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Resource constraints · cgroups(7) · docker container stats
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?