Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2300 bài viết · Website
Backend 01/09/2026 8 phút

Một tiêu thụ Redis Stream quên gọi XACK thổi 1,4 MB thành 28 MB — gấp 19,7 lần — và XTRIM cắt stream không cứu được một byte

List làm hàng đợi được và nhiều hệ thống dùng nó. Đo xem Stream cho thêm gì: nó gọn hơn List 24% dù mang thêm id, và khác biệt thật là khi tiến trình chết — bản tin ở lại danh sách chờ tới khi có ai XACK, còn List thì mất dấu. Nhưng danh sách chờ là cái bẫy: quên XACK làm bộ nhớ phình 19,7 lần, và XTRIM không cứu được vì chỗ tốn nằm ở pending, không ở stream. Giám sát XPENDING, không chỉ XLEN.

Linux 01/09/2026 9 phút

perf báo 62,65% cho hàm thật sự chiếm 62,50% — sai đúng 0,15 điểm mà không quấy rầy chương trình một nhịp nào; đây là điều tra chọn mẫu áp vào code

strace làm chậm 446 lần vì nó chặn từng lời gọi. perf đứng ở đầu kia của thang: nó chỉ thỉnh thoảng ngắt ra ghi con trỏ lệnh đang ở đâu, rồi đếm — chi phí không đo được, mà bốn hàm vẫn xếp hạng đúng tới 0,15 điểm phần trăm. Cùng logic thăm dò ý kiến: đủ mẫu ngẫu nhiên là tỷ lệ hội tụ về sự thật.

Linux 01/09/2026 8 phút

4.997 zombie cạn sạch giới hạn PID của container trong 0,17 giây — chúng không tốn byte RAM nào, chỉ giữ đúng một thứ: số hiệu tiến trình

Zombie không phải lỗi của tiến trình con mà của cha không đọc mã thoát. Tôi đo: một vòng waitpid dọn sạch 200 con, còn fork không thu hồi thì cạn 5.000 PID trong 0,17 giây và mọi tiến trình trong container nhận EAGAIN — triệu chứng là 'không tạo được tiến trình' trong khi RAM và CPU vẫn bình thường, đúng chỗ người trực đi tìm sai hướng.

Linux 01/09/2026 8 phút

Bảng điều khiển báo CPU 62,6% — 'còn 37% dư địa' — trong khi p99 đã 113 ms và tiến trình bị ghim 60 lần: con số trung bình mù tịt với điều tiết

Tôi dựng lại đúng cảnh 'ứng dụng chậm mà CPU chỉ 60%' và đo: ở 62,6% CPU trung bình, tiến trình đã bị throttle 60 lần và p99 nhảy lên 113 ms. Lý do là quota tính theo từng chu kỳ 100 ms chứ không theo phút — nên p99 chênh tới 44 lần trong khi CPU y hệt nhau, và chữ ký của nó là các yêu cầu chậm dồn đúng bội số 100 ms.

Linux 01/09/2026 9 phút

nproc bên trong container báo 16 nhân trong khi quota chỉ cho chạy bằng 1 — và vì tin lời nó, runtime tạo 32 luồng, làm chậm 44% và giãn đuôi trễ gấp đôi

cgroup không giới hạn bạn thấy bao nhiêu nhân, nó giới hạn bạn được chạy bao nhiêu thời gian. Nhưng nginx, Go, Node, JVM cũ đều tự chọn số worker theo nproc — và với quota 1 nhân, chúng đẻ ra 16. Đo thật: 32 luồng cho 1 nhân làm p99 xấu gấp đôi. Cộng thêm cái bẫy bộ nhớ: bộ đệm trang bẩn khiến OOM dù anon gần bằng 0.

DevOps 01/09/2026 8 phút

Khôi phục cả cụm Kubernetes từ snapshot mất đúng 77 giây — và công cụ để làm việc đó lại nằm trong chính cái container bạn vừa tắt

Khôi phục thật từ một snapshot 1,1 MB trên cụm dựng riêng để phá: 77 giây từ lúc dừng API server tới lúc nó sống lại. Ba cái bẫy đo được — etcdutl không có trên node mà nằm trong pod etcd đã chết, thư mục khôi phục phình thành 63 MB, và điều quan trọng nhất: khôi phục etcd không chọn lọc được. Cái tạo trước khi chụp về đủ, cái tạo sau khi chụp mất sạch không một dòng cảnh báo — đây là nút hoàn tác toàn cục, không phải Ctrl+Z một thao tác.