Cách sử dụng lệnh vmstat trên Linux

Giả sử máy tính Linux hoặc macOS của bạn đang sử dụng bộ nhớ ảo. Hãy khám phá cách nó ảnh hưởng đến việc sử dụng bộ nhớ vật lý, CPU và tài nguyên ổ cứng của hệ thống.

Bộ nhớ ảo là gì?

Máy tính được trang bị một lượng bộ nhớ vật lý hữu hạn, gọi Random Access Memory (RAM). RAM này cần được quản lý bởi kernel, chia sẻ giữa hệ điều hành và bất kỳ ứng dụng nào đang chạy. Nếu những nhu cầu kết hợp này đòi hỏi nhiều bộ nhớ hơn so với cài đặt vật lý trong máy tính, thì kernel có thể làm gì?

Các hệ điều hành Linux và giống như Unix như macOS có thể sử dụng không gian trên ổ cứng để giúp chúng quản lý nhu cầu bộ nhớ. Một khu vực dành riêng cho không gian ổ cứng được gọi là “không gian hoán đổi”, có thể được sử dụng như một phần mở rộng của RAM. Đây là bộ nhớ ảo.

Linux kernel có thể ghi nội dung của một khối bộ nhớ vào phần không gian hoán đổi này và giải phóng vùng RAM đó để sử dụng cho một tiến trình khác. Bộ nhớ có thể được lấy ra từ không gian hoán đổi và khôi phục vào RAM khi cần thiết gọi là paged out.

Tất nhiên, tốc độ truy cập cho bộ nhớ paged out chậm hơn so với bộ nhớ được giữ trong RAM. Và đó không phải là sự đánh đổi duy nhất. Trong khi bộ nhớ ảo cung cấp cho Linux một cách để quản lý nhu cầu bộ nhớ, thì việc sử dụng bộ nhớ ảo sẽ tăng gánh nặng ở những phần khác trên máy tính.

Ổ cứng của bạn phải thực hiện đọc và ghi nhiều hơn. Kernel và CPU phải thực hiện nhiều công việc hơn khi swap in (di chuyển dữ liệu từ không gian hoán đổi sang bộ nhớ chính) và swap out (di chuyển nội dung bộ nhớ chính sang ổ đĩa hoán đổi, khi không gian bộ nhớ chính bị đầy) bộ nhớ, cũng như giữ cho tất cả các đĩa quay để đáp ứng nhu cầu bộ nhớ của nhiều tiến trình khác nhau.

Linux cung cấp một cách để bạn giám sát tất cả các hoạt động này dưới dạng lệnh vmstat, báo cáo về số liệu thống kê bộ nhớ ảo.

Lệnh vmstat

Nếu bạn gõ lệnh vmstat không có tham số, nó sẽ hiển thị cho bạn một tập hợp các giá trị. Các giá trị này là mức trung bình cho mỗi thống kê, kể từ khi máy tính được khởi động lại lần cuối. Những số liệu này không phải là các giá trị ở thời điểm hiện tại.

vmstat

Lệnh vmstat

Một bảng giá trị ngắn được hiển thị.

Hiển thị bảng giá trị

Có các cột Procs, Memory, Swap, IO, System CPU. Cột cuối cùng (cột ngoài cùng bên phải) chứa dữ liệu liên quan đến CPU.

Có các cột Procs, Memory, Swap, IO, System và CPU

Dưới đây là danh sách các mục dữ liệu trong mỗi cột.

Procs

  • r: Số lượng các tiến trình có thể chạy được. Đây là những tiến trình đã và đang chạy hoặc chờ đợi một chu kỳ CPU mới.
  • b: Số lượng tiến trình trong trạng thái sleep liên tục. Thực chất thì những tiến trình này không “ngủ”, mà chúng chỉ đang chặn system call (là khi chương trình gọi một hàm hoặc một service nào đó nằm trong kernel của hệ điều hành) và không thể bị gián đoạn cho đến khi hành động hiện tại được hoàn thành. Thông thường, những tiến trình này diễn ra khi driver thiết bị đang chờ một số tài nguyên “rảnh rỗi”. Bất kỳ sự gián đoạn nào xảy ra đối với những quy trình này khi đang trong hàng đợi đều được xử lý khi quy trình tiếp tục hoạt động như bình thường.

Memory

  • swpd: Dung lượng bộ nhớ ảo được sử dụng. Nói cách khác, đây là số lượng bộ nhớ đã bị hoán đổi.
  • free: Dung lượng bộ nhớ nhàn rỗi (hiện không sử dụng).
  • buff: Dung lượng bộ nhớ được sử dụng làm buffer.
  • cache: Dung lượng bộ nhớ được sử dụng làm cache.

Swap

  • si: Lượng bộ nhớ ảo được swap in từ không gian hoán đổi.
  • so: Lượng bộ nhớ ảo được swap out vào không gian hoán đổi.

IO

  • bi: Các khối nhận được từ một thiết bị khối. Số lượng khối dữ liệu được sử dụng để trao đổi bộ nhớ ảo trở lại RAM.
  • bo: Các khối gửi đến một thiết bị khối. Số lượng khối dữ liệu được sử dụng để trao đổi bộ nhớ ảo ra khỏi RAM và vào không gian hoán đổi.

System

  • in: Số lượng gián đoạn mỗi giây, bao gồm cả xung nhịp.
  • cs: Số lượng context switch mỗi giây. Context switch là khi kernel hoán đổi từ xử lý chế độ hệ thống sang xử lý chế độ người dùng.

CPU

Các giá trị này là tất cả tỷ lệ phần trăm của tổng thời gian CPU.

  • us: Thời gian chạy code không phải kernel.
  • sy: Thời gian chạy code kernel.
  • id: Thời gian nhàn rỗi.
  • wa: Thời gian chờ đợi đầu vào hoặc đầu ra.
  • st: Thời gian có được từ một máy ảo. Đây là thời gian một máy ảo phải chờ hypervisor (phần mềm giám sát máy ảo) hoàn thành việc phục vụ các máy ảo khác trước khi nó có thể quay lại và xử lý máy ảo này.

Sử dụng một khoảng thời gian

Bạn có thể yêu cầu vmstat cung cấp cập nhật thường xuyên cho những số liệu này bằng cách sử dụng giá trị delay. Giá trị delay được cung cấp trong vài giây. Để cập nhật số liệu thống kê cứ sau 5 giây, hãy sử dụng lệnh sau:

vmstat 5

Sử dụng 1 khoảng thời gian

Cứ sau 5 giây vmstat sẽ thêm một dòng dữ liệu khác vào bảng. Bạn cần phải nhấn Ctrl+C để dừng việc này.

Cứ sau 5 giây vmstat sẽ thêm một dòng dữ liệu khác vào bảng

Sử dụng giá trị count

Sử dụng giá trị delay quá thấp sẽ gây thêm áp lực cho hệ thống. Nếu bạn cần có các bản cập nhật nhanh để cố gắng chẩn đoán sự cố, bạn nên sử dụng giá trị count cũng như giá trị delay.

Giá trị count cho vmstat cho biết có bao nhiêu lần cập nhật cần thực hiện trước khi thoát và đưa bạn trở lại Command Prompt. Nếu bạn không cung cấp giá trị count, vmstat sẽ chạy cho đến khi nó bị dừng bởi tổ hợp phím Ctrl+C.

Để vmstat cung cấp một bản cập nhật cứ sau 5 giây, nhưng chỉ trong 4 lần cập nhật, hãy sử dụng lệnh sau:

vmstat 5 4

Cập nhật sau 5 giây trong 4 lần

Sau 4 lần cập nhật, vmstat sẽ dừng lại.

Sau 4 lần cập nhật, vmstat sẽ dừng lại.

Thay đổi các đơn vị

Bạn có thể chọn hiển thị số liệu thống kê bộ nhớ và hoán đổi theo kilobyte hoặc megabyte bằng tùy chọn -S (ký tự đơn vị). Tùy chọn này phải được theo sau bởi một trong các đơn vị k, K, m hoặc M. Chúng đại diện cho:

  • k: 1000 byte
  • K: 1024 byte
  • m: 1000000 byte
  • M: 1048576 byte

Để cập nhật số liệu thống kê bộ nhớ và hoán đổi cứ sau 10 giây, hiển thị bằng megabyte, hãy sử dụng lệnh sau:

vmstat 10 -S M

Cập nhật sau 10 giây

Số liệu thống kê bộ nhớ và hoán đổi hiện được hiển thị bằng megabyte. Lưu ý rằng tùy chọn -S không ảnh hưởng đến thống kê khối IO. Chúng luôn được hiển thị trong các khối.

Đơn vị hiển thị là megabyte

Bộ nhớ hoạt động và không hoạt động

Nếu bạn sử dụng tùy chọn -a (active), các cột bộ nhớ buff và cache được thay thế bằng các cột “inact”“active”. Như bạn có thể đoán, những cột này cho thấy lượng bộ nhớ không hoạt động và hoạt động.

Để xem hai cột này thay vì cột buffcache, hãy bao gồm tùy chọn -a, như được hiển thị:

vmstat 5 -a -S M

Hiển thị inact và active

Các cột “inact”“active” bị ảnh hưởng bởi tùy chọn -S (ký tự đơn vị).

Các cột “inact” và “active” bị ảnh hưởng bởi tùy chọn -S (ký tự đơn vị).

Fork

Switch -f hiển thị số lượng fork đã xảy ra kể từ khi máy tính được khởi động. (Fork là hoạt động mà một tiến trình tạo ra một bản sao của chính nó).

Nói cách khác, điều này cho thấy số lượng tác vụ đã được khởi chạy (và phần lớn trong số chúng đã đóng lại) kể từ khi hệ thống được khởi động. Mỗi quá trình khởi chạy từ dòng lệnh sẽ tăng con số này. Mỗi khi một tác vụ hoặc tiến trình sinh ra hoặc nhân bản một nhiệm vụ mới, con số này sẽ tăng lên.

vmstat -f

Fork

Việc hiển thị fork không cập nhật.

Hiển thị Slabinfo

Kernel có tính năng quản lý bộ nhớ riêng để quản lý hệ điều hành và tất cả các ứng dụng.

Như bạn có thể tưởng tượng, kernel đang cấp phát và giải phóng bộ nhớ nhiều lần cho nhiều loại đối tượng dữ liệu khác nhau mà nó phải xử lý. Để làm cho việc này hiệu quả nhất có thể, nó sử dụng một hệ thống gọi là slab. Đây là một hình thức ghi lại cache.

Bộ nhớ được cấp phát, sử dụng và không còn cần thiết cho một loại đối tượng dữ liệu kernel cụ thể, có thể được sử dụng lại cho một đối tượng dữ liệu khác cùng loại mà không cần bộ nhớ được giải phóng và cấp phát lại. Hãy tưởng tượng slab đã được cấp phát trước và thực hiện đo lường các phân đoạn RAM cho nhu cầu riêng của kernel.

Để xem số liệu thống kê cho các slab, sử dụng tùy chọn -m (slab). Bạn cần sử dụng sudo và sẽ được nhắc nhập mật khẩu. Vì đầu ra có thể khá dài, bạn nên dùng thêm tùy chọn less.

sudo vmstat -m | less

Hiển thị Slabinfo

Đầu ra có 5 cột, bao gồm:

  • Cache: Tên của cache.
  • num: Số lượng các đối tượng hiện đang hoạt động trong cache này.
  • total: Tổng số đối tượng có sẵn trong cache này.
  • size: Kích thước của từng đối tượng trong cache.
  • pages: Tổng số trang bộ nhớ có (ít nhất) một đối tượng hiện được liên kết với cache này.

Đầu ra gồm 5 cột

Để thoát khỏi chế độ less, nhấn q.

Hiển thị bộ đếm sự kiện và thống kê bộ nhớ

Để hiển thị một trang của bộ đếm sự kiện và thống kê bộ nhớ, hãy sử dụng tùy chọn -s (stats). Lưu ý rằng, chữ s viết thường

vmstat -s

Hiển thị bộ đếm sự kiện và thống kê bộ nhớ

Mặc dù số liệu thống kê được báo cáo phần lớn giống như thông tin được tạo ra từ lệnh vmstat mặc định, một số dữ liệu trong đó được phân chia chi tiết hơn.

Ví dụ, đầu ra mặc định kết hợp cả thời gian CPU của user nice và non-nice vào cột us. Còn tùy chọn -s (stats) liệt kê các thống kê này một cách riêng biệt.

Tùy chọn -s (stats) liệt kê các thống kê này một cách riêng biệt.

Hiển thị thống kê ổ đĩa

Bạn có thể có được một danh sách thống kê ổ đĩa tương tự bằng cách sử dụng tùy chọn -d (disk).

vmstat -d | less

Hiển thị thống kê ổ đĩa

Đối với mỗi ổ đĩa, có 3 cột được hiển thị, đó là Reads, WritesIO.

Có 3 cột được hiển thị, đó là Reads, Writes và IO.

IO là cột ngoài cùng bên phải. Lưu ý rằng cột sec trong IO được đo bằng giây nhưng thống kê dựa trên thời gian trong cột ReadsWrites được đo bằng mili giây.

Ý nghĩa các cột

Đây là ý nghĩa của các cột:

Reads

  • total: Tổng số lần đọc ổ đĩa.
  • merged: Tổng số lần đọc được nhóm.
  • sectors: Tổng số các sector đã được đọc.
  • ms: Tổng số thời gian tính bằng mili giây đã được sử dụng để đọc dữ liệu từ ổ đĩa.

Writes

  • total: Tổng số lần ghi ổ đĩa.
  • merged: Tổng số các lần ghi được nhóm lại.
  • sectors: Tổng số các sector được ghi.
  • ms = Tổng số thời gian, tính bằng mili giây, đã được sử dụng ghi dữ liệu vào ổ đĩa.

IO

  • cur: Số lượng lần đọc hoặc ghi ổ đĩa hiện tại.
  • sec: Thời gian tính bằng giây cho bất kỳ việc đọc hoặc ghi nào đang được thực hiện.

Hiển thị số liệu thống kê ổ đĩa tóm tắt

Để hiển thị nhanh số liệu thống kê tóm tắt cho hoạt động của ổ đĩa, hãy sử dụng tùy chọn -D (disk-sum). Lưu ý chữ D được viết hoa.

vmstat -D

Hiển thị số liệu thống kê ổ đĩa tóm tắt

Số lượng ổ đĩa có thể trông cao bất thường. Máy tính được sử dụng làm ví dụ trong bài viết này đang chạy Ubuntu. Với Ubuntu, mỗi khi bạn cài đặt một ứng dụng từ Snap, một hệ thống file pseudo-filesystem squashfs được tạo ra sẽ gắn vào thiết bị /dev/loop.

Điều khó chịu là các mục thiết bị này được tính là thiết bị ổ cứng bởi nhiều lệnh và tiện ích Linux.

Điều khó chịu là các mục thiết bị này được tính là thiết bị ổ cứng bởi nhiều lệnh và tiện ích Linux.

Hiển thị thống kê phân vùng

Để xem số liệu thống kê liên quan đến một phân vùng cụ thể, hãy sử dụng tùy chọn -p (partition) và cung cấp định danh phân vùng làm tham số dòng lệnh.

Ở đây chúng ta sẽ xem xét phân vùng sda1. Chữ số một cho biết đây là phân vùng đầu tiên trên thiết bị sda, đây là ổ cứng chính cho máy tính này.

vmstat -p sda1

Hiển thị thống kê phân vùng

Thông tin trả về cho thấy tổng số lần đọc, ghi ổ đĩa vào và từ phân vùng đó, cũng như số lượng các sector có trong các hành động đọc và ghi ổ đĩa.

Thông tin trả về cho thấy tổng số lần đọc, ghi ổ đĩa vào và từ phân vùng đó

Việc tìm hiểu sâu một vấn đề nào đó luôn được khuyến khích. Đôi khi bạn sẽ cố gắng giải quyết vấn đề hoặc không quan tâm đến nó nữa (vì bạn chỉ muốn biết máy tính của mình hoạt động thế nào thôi).

Lệnh vmstat có thể cung cấp cho bạn rất nhiều thông tin hữu ích. Bây giờ, bạn đã biết làm thế nào để truy cập lệnh này và ý nghĩa của nó. Bạn cần dành chút thời gian tìm hiểu thêm và thực hiện một số chẩn đoán, để thực sự nắm bắt được vmstat.

Chúc bạn thành công!

Thứ Năm, 20/06/2019 13:45
51 👨 1.867
0 Bình luận
Sắp xếp theo
    ❖ Linux