DevOps 22/09/2026 5 phút

Network namespace: vì sao mỗi container có địa chỉ IP của riêng nó

Container có eth0, IP, bảng định tuyến và cổng của riêng nó — hai container đều mở cổng 80 mà không đụng nhau. Bài này chạy thật: container thấy eth0 172.17.0.5, network namespace mới chỉ có loopback (bị cắt mạng), và tự dựng cặp veth nối hai namespace với ping 0% loss — chính là cách Docker nối container vào bridge của host.

DevOps 22/09/2026 5 phút

cgroups: giới hạn CPU và bộ nhớ container — và vì sao vượt RAM thì bị giết, vượt CPU chỉ chậm

namespace cô lập tầm nhìn; cgroup là nửa còn lại — giới hạn tài nguyên. Bài này chạy thật: --cpus 0.25 làm cùng workload chậm đúng 4 lần, giới hạn nằm trong file /sys/fs/cgroup (memory.max, cpu.max), và container vượt --memory 32m bị kernel OOM kill thật (OOMKilled=true, exit 137). Hai kiểu vượt khác nhau: RAM bị giết, CPU chỉ throttle.

DevOps 22/09/2026 5 phút

Image layers và overlayfs: vì sao 100 container cùng image không tốn 100 lần đĩa

Image Docker là chồng nhiều layer chỉ-đọc; container chỉ thêm một lớp ghi mỏng chồng lên. Bài này chạy thật: docker history phơi bày từng layer, tự dựng overlayfs để thấy copy-on-write (sửa file thì copy sang upper, lower giữ nguyên), và ba container cùng image mỗi cái chỉ thêm 4.1kB trong khi 67.9MB image dùng chung.

Hệ thống 22/09/2026 5 phút

strace: nhìn thấy chương trình thật sự nói gì với kernel — khi log im lặng

App chạy lỗi mà log không nói gì? strace cho bạn thấy MỌI syscall chương trình gọi — mở file nào, đọc bao nhiêu byte, kết nối đi đâu. Bài này chạy thật: strace cat phơi bày openat/read/write, bắt file thiếu qua ENOENT, lọc chỉ syscall mạng, và gắn vào tiến trình đang chạy — công cụ debug mạnh nhất khi bạn không có mã nguồn hay log.

Hệ thống 22/09/2026 6 phút

strace -c và -T: tìm chính xác syscall nào khiến chương trình chậm

"App chậm mà không biết chậm ở đâu" — strace -c cho bảng tóm tắt: syscall nào chiếm bao nhiêu phần trăm thời gian và gọi bao nhiêu lần. Bài này đo thật: một chương trình ghi 20000 lần 1 byte cho thấy write chiếm 98% thời gian với 20000 lần gọi; gom lại còn 1 lần. Cùng -T đo thời gian từng syscall để soi cái chậm bất thường.

Hệ thống 22/09/2026 5 phút

/proc/<pid>: cửa sổ nhìn vào tiến trình đang sống — không cần dừng hay strace

Muốn biết một tiến trình đang mở file nào, dùng bao nhiêu RAM thật, chạy từ binary nào — mà không làm nó chậm đi? Đọc /proc/<pid>. Bài này chạy thật: cmdline cho lệnh đầy đủ, status cho VmRSS (RAM thật), fd/ cho file descriptor đang mở, cwd/exe cho thư mục và binary, maps cho bản đồ bộ nhớ — hệ thống file ảo do kernel sinh ra.