RAM là một thành phần vô cùng quan trọng trong mọi hệ thống Linux và luôn cần được giám sát chặt chẽ vì việc hết bộ nhớ có thể khiến server phản hồi rất chậm hay thậm chí không phản hồi. Cùng Vietnix tham khảo qua bài viết dưới đây để tìm hiểu rõ hơn bạn nhé.
Tổng hợp 6 cách kiểm tra RAM trong Linux
Kiểm tra bằng lệnh free
Lệnh phổ biến nhất để kiểm tra RAM trên Linux là lệnh free:
$ free total used free shared buff/cache available Mem: 4039588 3475216 137584 39596 426788 287580 Swap: 0 0 0
Output của lệnh được chia thành 2 mục: bộ nhớ (RAM thực/memory) và swap (bộ nhớ ảo). Một số thông tin ta có được từ lệnh là:
- total: tổng bộ nhớ được cài đặt trên hệ thống, tính theo đơn vị kilobyte.
- used: tổng RAM được dùng trên hệ thống, đơn vị kilobyte.
- free: tổng bộ nhớ còn trống và khả dụng trên hệ thống (kilobyte).
- shared: phần bộ nhớ được dùng bởi tmpfs – một filesystem ảo.
- buffer: bộ nhớ dùng bởi kernel buffer.
- cache: tổng bộ nhớ dùng bởi trang cache – nơi lưu trữ dữ liệu trước khi ghi vào đĩa.
- available: tổng bộ nhớ khả dụng trên hệ thống (kilobyte).
Trong đó, phần bộ nhớ được dùng bởi cache hoặc buffer đều có thể được giải phóng bởi Kernel mỗi khi hệ thống cần.
Bên cạnh đó, ta cũng có thể thêm option -h vào lệnh free để hiển thị kết quả ở định dạng dễ đọc hơn:
total used free shared buff/cache available Mem: 3.9G 3.3G 127M 38M 400M 256M Swap: 0B 0B 0B
Tương tự, ta cũng có thể hiển thị thêm cột Total bằng option -t:
$ free -t total used free shared buff/cache available Mem: 4039588 3499392 128828 39596 411368 263292 Swap: 0 0 0 Total: 4039588 3499392 128828
Kết hợp -t và -h:
$ free -th total used free shared buff/cache available Mem: 3.9G 3.3G 125M 38M 402M 257M Swap: 0B 0B 0B Total: 3.9G 3.3G 125M
Bạn đọc có thể tham khảo qua một số bài viết cùng chủ để Linu mà Vietnix đã tổng hợp:
Kiểm tra RAM trong Linux bằng lệnh vmstat
Lệnh vmstat cũng có phép kiểm tra phần bộ nhớ ảo trên hệ thống:
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 149720 49080 371348 0 0 125 121 1 1 2 1 96 0 0
Output sẽ hơi khó hiểu hơn một chút, với các thông tin như sau:
- r: số lượng process chạy được có ở trên hệ thống.
- b: số lượng process trong trạng thái sleep liên tục.
- swpd: lượng RAM đang được sử dụng.
- free: bộ nhớ còn trống.
- buff, cache: RAM được dùng bởi kernel buffer và cache trang.
- inactive, active: số lượng bộ nhớ đang ở trang thái hoạt động và không hoạt động.
- si: swap được dùng bởi đĩa.
- so: tổng bộ nhớ swap được swap sang đĩa.
Các cột khác là những thông tin liên quan đến CPU và I/O, vì ta chỉ cần kiểm tra RAM trong Linux nên có thể bỏ qua những thông số này.
$ vmstat -s 4039588 K total memory 3460532 K used memory 3398428 K active memory 198356 K inactive memory 162648 K free memory 48904 K buffer memory 367504 K swap cache 0 K total swap 0 K used swap 0 K free swap
Ở các dòng đầu tiên của output, bạn có thể biết được thông tin khá giống với lệnh free bao gồm:
- Tổng bộ nhớ
- Bộ nhớ đã được sử dụng,
- Bộ nhớ đang ở trạng thái hoạt động,
- Bộ nhớ ở trạng thái không hoạt động
- Bộ nhớ còn trống.
Kiểm tra RAM trong Linux bằng file /proc/meminfo
Kernel chính là thành phần ảo hóa filesystem và cung cấp các điểm truy cập cho một số thiết bị trên hệ thống. Trong đó, thư mục /proc thường sẽ lưu trữ các tham chiếu đến những process trên hệ thống, còn /dev lưu trữ tham chiếu đến các thiết bị ảo. Bên cạnh đó, trong thư mục /proc còn có file meminfo cũng có thể được dùng để kiểm tra RAM trong Linux
$ cat /proc/meminfo MemTotal: 4039588 kB MemFree: 142400 kB MemAvailable: 267144 kB Buffers: 39216 kB Cached: 292508 kB SwapCached: 0 kB Active: 3436724 kB Inactive: 180432 kB Active(anon): 3285468 kB Inactive(anon): 38960 kB Active(file): 151256 kB Inactive(file): 141472 kB Unevictable: 36 kB Mlocked: 36 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 708 kB
Thông tin được cung cấp cũng khớp với kết quả trả về từ lệnh free và vmstat. File /proc/meminfo cho biết thông tin về tổng bộ nhớ trên hệ thống, bộ nhớ còn trống, bộ nhớ khả dụng và buffer, page cache.
Kiểm tra bằng demidecode
Nếu muốn kiểm tra phần cứng RAM thì ta có thể dùng lệnh dmidecode (chạy bằng quyền sudo):
$ sudo dmidecode # dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 2.4 present. 13 structures occupying 405 bytes. Table at 0x000F10D0. Handle 0x0000, DMI type 0, 24 bytes BIOS Information Vendor: Private Version: 20171212 Release Date: 12/12/2017 Address: 0xE8000 Runtime Size: 96 kB ROM Size: 64 kB Characteristics: BIOS characteristics not supported Targeted content
Theo mặc định thì lệnh dmidecode được dùng để dump (kết xuất) tất cả phần cứng có trên hệ thống. Nếu muốn xem thông tin gần cứng riêng của bộ nhớ thì ta cần chỉ định thêm loại phần cứng như sau:
$ sudo dmidecode --type memory # dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 2.4 present. Handle 0x1000, DMI type 16, 15 bytes Physical Memory Array Location: Other Use: System Memory Error Correction Type: Multi-bit ECC Maximum Capacity: 4 GB Error Information Handle: Not Provided Number Of Devices: 1 Handle 0x1100, DMI type 17, 21 bytes Memory Device Array Handle: 0x1000 Error Information Handle: 0x0000 Total Width: 64 bits Data Width: 64 bits Size: 4096 MB Form Factor: DIMM Set: None Locator: DIMM 0 Bank Locator: Not Specified Type: RAM Type Detail: None
Kiểm tra RAM bằng Prometheus
Bên cạnh cách sử dụng lệnh truyền thống, bạn có thể sử dụng những công cụ giám sát hiện đại như Prometheus và Grafana. Prometheus cho phép sử dụng công cụ Node Exporter để thu thập các chỉ số host, chẳng hạn như chỉ số về bộ nhớ trong file /proc/meminfo.
Sau khi thu thập xong, bạn import một dashboard có sẵn vào Grafana để giám sát thông số bộ nhớ trong thời gian thực.
Kiểm tra RAM bằng lệnh top/htop
Một cách phổ biến nữa để kiểm tra RAM trong Linux là dùng lệnh top trong Linux hay htop. Trong đó top đã được cài đặt sẵn trên hệ thống:
$ top top - 12:16:27 up 306 days, 7:11, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 256 total, 1 running, 214 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.3 us, 0.7 sy, 0.0 ni, 97.8 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4039588 total, 314884 free, 3436960 used, 287744 buff/cache KiB Swap: 0 total, 0 free, 0 used. 325952 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 23616 telegraf 20 0 1201168 19808 4944 S 1.3 0.5 1051:02 telegraf 23120 influxdb 20 0 2043020 250208 9956 S 0.7 6.2 715:58.34 influxd 3688 root 20 0 1031632 43296 0 S 0.3 1.1 497:27.81 mongod
Bên cạnh thông tin về CPU thì lệnh top còn cho phép kiểm tra RAM có trên hệ thống.
Lệnh htop cũng cho phép kiểm tra bộ nhớ trên server, nhưng có thể chưa có sẵn trên máy. Ta có thể cài đặt qua yum hoặc apt như sau:
$ sudo apt-get install htop $ sudo yum install htop
Kiểm tra RAM bằng lệnh htop:
$ htop 1 [| 2.0%] Tasks: 192, 608 thr; 1 running 2 [| 0.7%] Load average: 0.16 0.07 0.02 Mem[||||||||||||||||||||||||||||||||||3.32G/3.85G] Uptime: 306 days(!), 07:16:02 Swp[ 0K/0K] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 29728 user 20 0 26336 4520 3148 R 1.3 0.1 0:01.11 htop 328872 logstash 39 19 3679M 721M 0 S 0.7 18.3 11h58:46 /usr/bin/java -Xms1g -Xmx1g -
Lệnh htop cũng cho ra kết quả tương tự, nhưng ở định dạng thân thiện hơn với người dùng.
Lời kết
Trong bài viết này, Vietnix đã hướng dẫn nhiều cách khác nhau để kiểm tra RAM trong Linux thông qua việc sử dụng lệnh và cả những công cụ giám sát hiện đại như Prometheus hặc Grafana. Việc giám sát RAM thường xuyên là vô cùng quan trọng đối với mọi quản trị viên của hệ thống, nếu bạn đọc hứng thú với chủ đề quản trị hệ thống Linux thì đừng bỏ lỡ những bài viết sắp tới của Vietnix nhé!