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

Memory-mapped file (mmap) trong Go: đọc tệp lớn không qua heap

os.ReadFile sao chép toàn bộ tệp vào heap Go. mmap ánh xạ tệp thẳng vào không gian địa chỉ, đọc như slice byte, để HĐH nạp trang theo nhu cầu — không copy, không heap, không áp lực GC. Đo thật trong Go: đọc tệp 200 MB, ReadFile tốn +191 MB heap và 125ms, mmap chỉ +0 MB heap và 31ms.

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.