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

real, user, sys: ba con số của time cho biết chương trình chậm do CPU hay do chờ

Chương trình chậm — nhưng chậm vì tính toán nặng, vì chờ I/O, hay vì gọi kernel quá nhiều? Ba con số của time trả lời ngay. Bài này đo thật: chương trình CPU-bound cho user≈real, sleep-bound cho real≫user+sys (đang chờ), syscall-heavy cho sys cao — cùng 'chậm' nhưng ba nguyên nhân và ba cách sửa khác nhau.

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

Theo dõi I/O của tiến trình: /proc/<pid>/io và bẫy page cache đánh lừa bạn

Máy chậm mà CPU vẫn rảnh? Có thể một tiến trình đang quật đĩa. /proc/<pid>/io cho biết nó đọc/ghi bao nhiêu byte. Bài này chạy thật: một tiến trình ghi 200MB hiện write_bytes=200MB; nhưng đọc file trong page cache cho rchar=100MB mà read_bytes=0 — dữ liệu từ RAM, không chạm đĩa. Biết đọc cột nào để không bị đánh lừa.

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

Load average thực sự nghĩa là gì: ba số 1/5/15 phút, và vì sao load cao không phải lúc nào cũng là CPU

Ai cũng thấy 'load average: 3.54, 1.34, 0.49' mà ít người đọc đúng. Nó không phải %CPU — mà là số tiến trình trung bình đang chạy HOẶC chờ I/O. Bài này chạy thật: 4 tiến trình CPU-bound làm load 1-phút leo từ 0.11 lên ~4; rồi 6 tiến trình dd kẹt ở D-state (chờ đĩa, gần 0% CPU) vẫn đẩy load lên — chứng minh load khác CPU. Và cách so load với số core để biết máy có quá tải không.

Lập trình 22/09/2026 9 phút

cgroups v2 giới hạn I/O và số tiến trình đo thật: --pids-limit chặn fork bomb đúng tại trần 50 tiến trình, --device-write-bps bóp ghi đĩa từ 1,7 GB/s xuống 10,6 MB/s, nhưng ghi buffered lách qua page cache với 3,3 GB/s và chỉ bị bóp khi fsync

Hai lưới an toàn ít ai đặt. pids.max là trần cho tổng số tiến trình: fork bomb bằng python os.fork() dừng đúng tại 50 tiến trình với --pids-limit=50, pids.current chạm 50, pids.events đếm fork bị từ chối. io.max là trần băng thông đĩa: --device-write-bps /dev/vda:10mb cho io.max wbps 10485760, ghi direct bị bóp xuống 10,6 MB/s so với 1,7 GB/s không giới hạn. Nhưng io.max chỉ chặn I/O thật xuống thiết bị: ghi buffered vào page cache đạt 3,3 GB/s vì chưa chạm đĩa, chỉ bị bóp xuống 10,4 MB/s khi fsync ép writeback. App ghi rồi fsync như database cảm nhận io.max, ghi buffered rồi quên thì không.