Trong bộ công cụ quản trị hệ điều hành Linux (procps-ng), free là câu lệnh đầu tiên và thông dụng nhất mà mọi kỹ sư SRE, DevOps hay Sysadmin đều gõ vào terminal mỗi khi cần kiểm tra tình trạng bộ nhớ RAM hoặc khi hệ thống phát cảnh báo tài nguyên.
Dưới đây là ảnh chụp màn hình terminal thực tế khi thực thi lệnh free -v -h trên một máy chủ Linux:

Kết quả đầu ra dạng văn bản từ lệnh trên:
darktuan@DarkTuaz:~$ free -v -h
total used free shared buff/cache available
Mem: 15Gi 1.9Gi 11Gi 24Mi 2.2Gi 13Gi
Swap: 4.0Gi 0B 4.0Gi
Comm: 11Gi 4.6Gi 7.2Gi
darktuan@DarkTuaz:~$
Hãy cùng bóc tách và giải mã chi tiết từng hàng, từng cột và từng giá trị xuất hiện trong kết quả trên dưới góc nhìn của một kỹ sư Vận hành Hệ thống.
1. Dòng Mem: (Bộ Nhớ Vật Lý - Physical RAM)
Dòng Mem: thể hiện chi tiết trạng thái phân bổ của thanh RAM vật lý gắn trên máy chủ:
total used free shared buff/cache available
Mem: 15Gi 1.9Gi 11Gi 24Mi 2.2Gi 13Gi
| Cột | Giá trị trong ảnh | Bản chất kỹ thuật | Ý nghĩa đối với SRE / Sysadmin |
|---|---|---|---|
total | 15Gi | Tổng dung lượng RAM vật lý mà Linux Kernel có thể quản lý | Bằng tổng RAM phần cứng trừ đi phần nhỏ dung lượng đã dành riêng (reserved) cho BIOS và nạp nhân Kernel |
used | 1.9Gi | Bộ nhớ RAM thực tế đang bị ứng dụng chiếm dụng | Được tính theo công thức: used = total - free - buff/cache. Đây là lượng RAM thực sự đang nuôi các tiến trình (User space processes) |
free | 11Gi | Bộ nhớ RAM hoàn toàn trống rỗng | Lượng RAM chưa có bất kỳ dữ liệu nào ghi vào và cũng chưa được dùng làm cache |
shared | 24Mi | Bộ nhớ chia sẻ (Shared Memory) | Dung lượng RAM được dùng chung bởi nhiều tiến trình (chủ yếu là tmpfs, shmem, POSIX shared memory và /dev/shm) |
buff/cache | 2.2Gi | Tổng dung lượng của Buffers và Page Cache gộp lại | Dữ liệu đệm từ ổ cứng được lưu tạm trên RAM để tăng tốc độ I/O. Vùng này sẽ được Kernel thu hồi tức thì khi có ứng dụng cần RAM |
available | 13Gi | Lượng RAM thực tế có thể sử dụng cho ứng dụng mới | Con số VÀNG quan trọng nhất! Kernel ước tính lượng RAM sẵn sàng cấp phát ngay lập tức mà không cần dùng đến Swap |
1.1. Phân Biệt Buffers vs Page Cache Trong Cột buff/cache
Mặc định lệnh free gộp cả hai giá trị này thành một cột duy nhất buff/cache. Nếu thêm cờ --wide (free -w -h), Linux sẽ tách thành 2 cột độc lập:
- Buffers (Bộ đệm khối):
- Lưu trữ metadata của hệ thống tệp (directory structure, inode information, superblock) và các khối đọc/ghi thô (raw block device I/O).
- Thường có dung lượng nhỏ (vài chục đến vài trăm MB).
- Page Cache (Bộ đệm tệp):
- Chứa nội dung thực tế của các file được đọc từ ổ cứng.
- Khi ứng dụng đọc file lần đầu, Kernel nạp nội dung vào Page Cache. Các lần đọc tiếp theo diễn ra hoàn toàn trên RAM với tốc độ nhanh gấp hàng trăm lần ổ SSD/NVMe.
[!NOTE] 🧠 Triết lý thiết kế của Linux: "Unused RAM is wasted RAM" (RAM bỏ trống là RAM lãng phí). Nhân Linux sẽ chủ động tận dụng tối đa lượng RAM nhàn rỗi để làm
buff/cache. Khi các tiến trình cần thêm bộ nhớ, Kernel sẽ lập tức hủy bỏ các trang cache này để cấp phát cho ứng dụng mà không gây nghẽn hay treo máy.
1.2. Sự Khác Biệt Giữa free và available (Hiểu Lầm Phổ Biến Nhất)
Nhiều người quản trị mới thường nhìn vào cột free và hoảng hốt khi thấy con số này chỉ còn vài trăm Megabyte, rồi cho rằng máy chủ sắp cạn RAM.
Hiểu lầm: RAM còn lại = free (11Gi)
Thực tế: RAM sẵn sàng cấp phát = available (13Gi)
free: Chỉ là lượng RAM "ngủ đông", hoàn toàn chưa chạm tới.available: Bằngfreecộng thêm phần dung lượng có thể thu hồi được (reclaimable memory) từbuff/cache(trừ đi một lượng nhỏ an toàn để duy trì hoạt động cơ bản của hệ thống).
[!TIP] 🎯 Quy tắc giám sát chuẩn Production: Khi viết rule cảnh báo (Alertmanager, Datadog, Zabbix), TUYỆT ĐỐI KHÔNG dùng
freeđể tính phần trăm RAM trống. Hãy luôn dùng chỉ sốavailable:# Công thức tính tỷ lệ % RAM khả dụng trong Prometheus node_exporter: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
2. Dòng Swap: (Bộ Nhớ Hoán Đổi Trên Ổ Đĩa)
Dòng Swap: thể hiện tình trạng của không gian hoán đổi (Swap partition hoặc Swap file):
total used free shared buff/cache available
Swap: 4.0Gi 0B 4.0Gi
total(4.0Gi): Kích thước phân vùng/file Swap được cấu hình trên hệ thống là 4GB.used(0B): Hệ thống hiện tại đang sử dụng 0 Byte Swap.free(4.0Gi): Toàn bộ 4GB Swap đang còn nguyên vẹn.
🎯 Góc Nhìn Thực Chiến Của SRE
- Khi
Swap used = 0Bvàavailable = 13Gi: Máy chủ đang ở trạng thái hiệu năng đỉnh cao nhất. Toàn bộ tác vụ đều chạy trực tiếp trên chip nhớ RAM vật lý. - Nếu
Swap usedtăng cao và đi kèm với hiện tượng I/O Wait tăng vọt: Hệ thống đang rơi vào tình trạng Swap Thrashing (Kernel liên tục hoán đổi dữ liệu giữa RAM và đĩa), làm suy giảm nghiêm trọng tốc độ phản hồi của ứng dụng.
3. Dòng Comm: (Committed Memory - Điểm Sáng Nâng Cao Từ Cờ -v)
Điểm đặc biệt và giá trị nhất trong ảnh chụp màn hình của bạn là có thêm dòng Comm:. Dòng này chỉ xuất hiện khi bạn thêm cờ -v (--committed) trong các phiên bản procps-ng mới:
total used free shared buff/cache available
Comm: 11Gi 4.6Gi 7.2Gi
Dữ liệu này được trích xuất trực tiếp từ file /proc/meminfo với hai trường: CommitLimit và Committed_AS.
3.1. Ý Nghĩa Của Từng Con Số
total(11Gi) - Commit Limit:- Trần bộ nhớ ảo tối đa mà Linux Kernel cam kết có thể cấp phát cho các tiến trình nếu chính sách kiểm soát Overcommit (
vm.overcommit_memory = 2) được kích hoạt. - Công thức tính:
CommitLimit = SwapTotal + (RAM * vm.overcommit_ratio / 100) - Với cấu hình thực tế trong ảnh: RAM 15Gi, Swap 4Gi, với tỷ lệ mặc định
overcommit_ratio = 50%:CommitLimit = 4Gi + (15Gi * 50%) = 4Gi + 7.5Gi = 11.5Gi (~11Gi)
- Trần bộ nhớ ảo tối đa mà Linux Kernel cam kết có thể cấp phát cho các tiến trình nếu chính sách kiểm soát Overcommit (
used(4.6Gi) - Committed_AS (Committed Address Space):- Tổng dung lượng bộ nhớ ảo mà tất cả các tiến trình trên máy chủ ĐÃ YÊU CẦU thông qua các hàm cấp phát bộ nhớ (
malloc(),mmap()). - ⚠️ Điểm mấu chốt: Dù RAM thực tế (
used) chỉ mới tốn 1.9Gi, nhưng tổng lượng bộ nhớ các tiến trình "đăng ký trước" đã lên tới 4.6Gi! - Đây là trường hợp xấu nhất: nếu tất cả các tiến trình cùng lúc ghi đầy đủ dữ liệu vào vùng nhớ ảo mà chúng đã xin, hệ thống sẽ cần 4.6Gi RAM thực tế.
- Tổng dung lượng bộ nhớ ảo mà tất cả các tiến trình trên máy chủ ĐÃ YÊU CẦU thông qua các hàm cấp phát bộ nhớ (
free(7.2Gi) - Commit Budget:- Lượng ngân sách commit còn lại mà các tiến trình có thể tiếp tục yêu cầu cấp phát trước khi chạm trần
CommitLimit(11Gi - 4.6Gi = ~6.5 - 7.2Gi).
- Lượng ngân sách commit còn lại mà các tiến trình có thể tiếp tục yêu cầu cấp phát trước khi chạm trần
[!IMPORTANT] 🛡️ Ý nghĩa đối với việc phòng chống OOM Killer: Nhờ cơ chế Memory Overcommit, Linux cho phép các ứng dụng xin nhiều RAM hơn lượng RAM vật lý đang có. Tuy nhiên, nếu
Committed_ASvượt quá xa khả năng chịu đựng của phần cứng và các ứng dụng đồng loạt ghi dữ liệu thật, Kernel sẽ buộc phải kích hoạt OOM Killer để tiêu diệt bớt tiến trình. Giám sát dòngComm:giúp SRE phát hiện sớm nguy cơ này.
4. Bảng Tra Cứu Các Tham Số Lệnh free Thường Dùng
Lệnh free cung cấp rất nhiều cờ tùy biến phục vụ cho từng mục đích kiểm tra khác nhau:
| Lệnh & Cờ tham số | Mục đích sử dụng | Khi nào nên dùng? |
|---|---|---|
free -h | Hiển thị đơn vị dễ đọc (Human-readable: GiB, MiB, KiB) | Dùng hàng ngày khi thao tác trực tiếp trên terminal |
free -m | Hiển thị theo đơn vị Megabytes (MB) | Dùng trong Bash script hoặc parse log giám sát |
free -g | Hiển thị theo đơn vị Gigabytes (GB) | Dùng trên các máy chủ có dung lượng RAM cực lớn (128GB - 1TB) |
free -w (--wide) | Tách riêng hai cột buffers và cache | Khi cần phân tích sâu mức tiêu hao giữa metadata đĩa và page cache |
free -v (--committed) | Bổ sung dòng Comm: phân tích bộ nhớ cam kết | Khi chẩn đoán lỗi OOM, cấu hình máy chủ Database, Redis |
free -t (--total) | Bổ sung dòng Total: cộng gộp cả RAM và Swap | Xem tổng năng lực lưu trữ bộ nhớ của toàn bộ hệ thống |
free -s 1 (--seconds 1) | Tự động làm mới kết quả sau mỗi 1 giây | Giám sát biến động RAM theo thời gian thực (tương tự live monitor) |
free -c 5 (--count 5) | Chạy làm mới đúng 5 lần rồi tự động dừng lại | Kết hợp với cờ -s để thu thập mẫu dữ liệu đo lường |
5. Tình Huống Sự Cố & Kịch Bản Phỏng Vấn SRE Thực Tế
Câu hỏi 1: "Server cảnh báo hết RAM vì free chỉ còn 150MB. Tôi có cần nâng cấp thêm RAM cho máy chủ ngay không?"
Trả lời: Chưa cần! Hãy kiểm tra ngay cột
availablevàbuff/cache.
- Nếu
buff/cacheđang chiếm vài Gigabyte vàavailablevẫn còn lớn (ví dụ 10GB như trong ảnh thực tế trên), hệ thống hoàn toàn bình thường. Đó chỉ là Page Cache đang làm nhiệm vụ tối ưu hóa tốc độ đọc file.- Chỉ khi nào
availabletiệm cận 0 vàSwap usedbắt đầu tăng liên tục, đó mới là lúc máy chủ thực sự thiếu RAM vật lý.
Câu hỏi 2: "Làm thế nào để giải phóng Page Cache tức thì để kiểm tra hiệu năng đĩa (Benchmark)?"
Nếu bạn muốn xóa sạch vùng nhớ buff/cache để đo lường tốc độ đọc đĩa thực tế của ổ cứng:
# Bước 1: Ghi toàn bộ dữ liệu đang chờ từ RAM xuống đĩa an toàn
sync
# Bước 2: Yêu cầu Kernel giải phóng PageCache, dentries và inodes
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Bước 3: Chạy lại lệnh free để kiểm tra kết quả
free -h
📌 Tổng Kết & Mối Liên Hệ Với Lệnh htop
Hãy so sánh kết quả giữa lệnh free -v -h và công cụ htop trên cùng máy chủ này:
- Trên thanh đo RAM của
htop: Bạn thấy thanhMem [ 1.99G/15.5G ]vàSwp [ 0K/4.00G ]. - Trên lệnh
free: Bạn thấyused: 1.9Gi,total: 15Gi,Swap used: 0B,total: 4.0Gi.
Cả hai công cụ đều lấy dữ liệu nền tảng từ tập tin nhân hệ thống /proc/meminfo. Trong khi htop mang lại giao diện trực quan và phân tích chi tiết từng tiến trình (RES, VIRT, SHR), thì lệnh free -v -h là vũ khí kiểm tra nhanh gọn, chính xác và cung cấp cái nhìn tổng thể về ngân sách bộ nhớ của toàn bộ hệ điều hành.
Bài viết liên quan:
- Đọc Hiểu Toàn Bộ Các Giá Trị Trong Lệnh htop – Phân tích trực quan 24 CPU cores, RAM meters, VIRT/RES/SHR và cây tiến trình từ ảnh chụp thực tế.
- Quản Trị Process, Bộ Nhớ & Filesystem – Đào sâu kiến trúc bộ nhớ ảo Linux, cơ chế OOM Killer và tham số
vm.swappiness.