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.

2312 bài viết · Website
Công cụ 22/09/2026 5 phút

cron: vì sao job "chạy tay thì được, cron thì không" — bẫy PATH và môi trường tối giản

Cron chạy job với môi trường tối giản, không nạp .bashrc, PATH rất ngắn — đó là lý do #1 khiến job cron im lặng thất bại dù chạy tay hoàn hảo. Bài này chạy crond THẬT: job fire lúc 10:24:01 báo 'go: command not found' vì PATH=/usr/bin:/bin, rồi sau khi set PATH trong crontab lại chạy đúng lúc 10:25:01. Kèm cú pháp năm trường và cách bắt log.

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.

Công cụ 22/09/2026 5 phút

tar và nén: vì sao tar không nén, và cái bẫy thứ tự cờ khiến bạn mất file

tar chỉ GỘP nhiều file thành một — nén là bước riêng (gzip/zstd/xz). Hiểu lầm này cùng cái bẫy thứ tự cờ -f khiến nhiều người tạo nhầm archive hoặc ghi đè mất dữ liệu. Bài này chạy thật: tar cf vs czf, so gzip vs zstd về kích thước và tốc độ, xem nội dung không cần giải nén, và minh chứng tar -cf data goi.tar báo lỗi.

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.

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

CQRS trong Go: tách mô hình đọc khỏi mô hình ghi, và cái giá của read model

CQRS tách đường ghi (command, chuẩn hóa) khỏi đường đọc (query, gộp sẵn) để mỗi bên tối ưu độc lập. Đo thật trong Go 1.23: đọc từ read model dựng sẵn nhanh hơn tính lại từ 100k đơn khoảng 328 lần, đổi lại mỗi lệnh ghi phải chiếu và có thể trễ nhất quán.

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

Stop-the-world trong Go: GC còn dừng chương trình ở đâu, và bao lâu

GC Go dừng toàn bộ chương trình ở đúng hai điểm mỗi chu kỳ để chuyển pha an toàn. Đo thật: STW chỉ vài chục tới vài trăm micro-giây, tăng nhẹ từ 39 us (100 goroutine) lên 161 us (100k) nhưng luôn dưới 1 ms kể cả nửa triệu goroutine. Vì sao vẫn cần STW và điều gì làm nó dài ra. Go 1.23.