1. Công cụ kiểm tra trạng thái bộ nhớ
Để quản lý hiệu suất hệ thống, người quản trị cần nắm vững các lệnh kiểm tra tài nguyên bộ nhớ.
Sử dụng lệnh free
Lệnh free cung cấp cái nhìn tổng quan về dung lượng RAM vật lý và bộ nhớ trao đổi (Swap). Trong các phiên bản kernel hiện đại, cột available là chỉ số quan trọng nhất, phản ánh dung lượng thực tế có thể cấp phát cho các tiến trình mới mà không gây ra tràn bộ nhớ (OOM). Giá trị này bao gồm cả phần bộ nhớ đệm (cache) và bộ đệm (buffer) có thể giải phóng được khi cần thiết.
$ free -h
total used free shared buff/cache available
Mem: 3.8Gi 350Mi 3.1Gi 15Mi 400Mi 3.3Gi
Swap: 2.0Gi 0B 2.0Gi
Sử dụng lệnh top
Lệnh top là công cụ giám sát thời gian thực hữu hiệu. Để tập trung vào vấn đề bộ nhớ, bạn có thể nhấn phím Shift + M (chữ M viết hoa). Thao tác này sẽ sắp xếp danh sách tiến trình theo thứ tự giảm dần của mức tiêu thụ RAM, giúp nhanh chóng phát hiện các tiến trình gây nghẽn tài nguyên.
Sử dụng lệnh ps
Để liệt kê các tiến trình đang chạy theo mức tiêu thụ bộ nhớ thực tế, ta có thể kết hợp lệnh ps với các tùy chọn sắp xếp. Ví dụ dưới đây hiển thị 10 tiến trình tiêu tốn nhiều bộ nhớ nhất:
$ ps -eo pid,comm,%mem --sort=-%mem | head -n 10
PID COMMAND %MEM
801 firewalld 0.7
1140 tuned 0.4
766 polkitd 0.3
814 NetworkManager 0.2
764 vmtoolsd 0.2
763 VGAuthService 0.1
1460 sshd 0.1
1141 rsyslogd 0.1
1143 sshd 0.1
1329 qmgr 0.1
Lưu ý: Dấu - trong --sort=-%mem chỉ định sắp xếp theo thứ tự giảm dần.
2. Thông tin chi tiết từ kernel
Tất cả các thông số kỹ thuật về bộ nhớ đều được kernel xuất ra qua tệp ảo /proc/meminfo. Tệp này chứa hàng loạt chỉ số quan trọng giúp phân tích sâu hơn về trạng thái RAM.
$ cat /proc/meminfo
MemTotal: 4028428 kB
MemFree: 3561616 kB
MemAvailable: 3597164 kB
Buffers: 2108 kB
Cached: 237892 kB
SwapCached: 0 kB
Active: 195264 kB
Inactive: 111844 kB
Active(anon): 67760 kB
Inactive(anon): 11152 kB
Active(file): 127504 kB
Inactive(file): 100692 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 67108 kB
Mapped: 25028 kB
Shmem: 11804 kB
Slab: 59536 kB
SReclaimable: 24896 kB
SUnreclaim: 34640 kB
KernelStack: 5072 kB
PageTables: 4068 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4111360 kB
Committed_AS: 270624 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 193148 kB
VmallocChunk: 34359310332 kB
HardwareCorrupted: 0 kB
AnonHugePages: 12288 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 100160 kB
DirectMap2M: 4093952 kB
Một số chỉ số cần lưu ý:
- Active/Inactive: Phân loại bộ nhớ dựa trên tần suất truy cập. Kernel sẽ ưu tiên giữ lại các trang ở trạng thái Active và có xu hướng giải phóng các trang Inactive khi cần.
- Slab: Bộ nhớ dùng bởi kernel để quản lý các cấu trúc dữ liệu nội bộ.
- Dirty: Dữ liệu đang chờ được ghi xuống ổ cứng.
3. Nguyên tắc điều chỉnh và tối ưu hóa
Việc tinh chỉnh (tuning) bộ nhớ ở cấp độ kernel thường không cần thiết nhiều như tối ưu hóa ứng dụng. Linux có cơ chế quản lý bộ nhớ tự động rất hiệu quả. Tuy nhiên, người quản trị cần chú ý đến việc sử dụng Swap. Nếu hệ thống liên tục phụ thuộc vào Swap trong thời gian dài, đây là dấu hiệu rõ ràng cho thấy vật lý RAM đã bị quá tải, và giải pháp triệt để nhất là nâng cấp phần cứng (thêm thanh RAM).