Nếu bạn đang tìm kiếm một tiện ích dòng lệnh mà bạn có thể sử dụng để truy cập thông tin về các quy trình, hoạt động của CPU, bộ nhớ, v.v., bạn sẽ vui mừng khi biết rằng vmstat thực hiện điều này cho bạn.
Trong bài viết này, chúng ta sẽ thảo luận về những điều cơ bản của công cụ này bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ trong bài viết này đã được thử nghiệm trên máy Ubuntu 20.04 LTS, nhưng nó cũng sẽ hoạt động trên CentOS và Debian.
Và đây là cách trang hướng dẫn của công cụ giải thích về nó:
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp có thể giúp bạn hiểu rõ hơn về cách lệnh vmstat hoạt động:
Ví dụ, trong trường hợp của tôi, lệnh trên tạo ra đầu ra sau:
Như hàng đầu tiên chỉ ra, đầu ra được chia thành sáu phần. Trang hướng dẫn sử dụng của công cụ chứa thông tin chi tiết về các giá trị này. Sau đây là đoạn trích:
Giá trị số này hoạt động như độ trễ (tính bằng giây) sau đó đầu ra được cập nhật. Ví dụ:
Theo cách này, đầu ra vmstat sẽ được làm mới sau mỗi 3 giây.
Ví dụ, trong trường hợp của tôi, đây là một đoạn trích của đầu ra được tạo ra:
Đây là kết quả đầu ra mà lệnh này tạo ra trên hệ thống của tôi:
Các mục được tô sáng hiển thị dấu thời gian có trong mỗi dòng.
Trong bài viết này, chúng ta sẽ thảo luận về những điều cơ bản của công cụ này bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ trong bài viết này đã được thử nghiệm trên máy Ubuntu 20.04 LTS, nhưng nó cũng sẽ hoạt động trên CentOS và Debian.
Lệnh vmstat của Linux
Lệnh vmstat trong Linux báo cáo số liệu thống kê bộ nhớ ảo. Sau đây là cú pháp của nó:
Mã:
vmstat [tùy chọn] [trì hoãn [đếm]]
Mã:
vmstat báo cáo thông tin về các tiến trình, bộ nhớ, phân trang, khối IO,
bẫy, đĩa và hoạt động của CPU.
Báo cáo đầu tiên được tạo ra sẽ đưa ra mức trung bình kể từ lần khởi động lại cuối cùng. Các báo cáo bổ sung cung cấp thông tin về thời gian lấy mẫu có độ trễ về chiều dài.
Các báo cáo về quy trình và bộ nhớ đều diễn ra tức thời trong cả hai trường hợp.
Câu hỏi 1. Sử dụng vmstat như thế nào?
Đối với cách sử dụng cơ bản, chỉ cần thực thi 'vmstat' mà không có bất kỳ tùy chọn nào.
Mã:
vmstat
Mã:
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 401160 100252 1307468 0 0 5 17 49 70 0 0 100 0 0
Mã:
Procs
r: Số lượng tiến trình có thể chạy (đang chạy hoặc đang chờ thời gian chạy).
b: Số lượng tiến trình ở chế độ ngủ không bị gián đoạn.
Memory
swpd: lượng bộ nhớ ảo được sử dụng.
free: lượng bộ nhớ nhàn rỗi.
buff: lượng bộ nhớ được sử dụng làm bộ đệm.
cache: lượng bộ nhớ được sử dụng làm bộ đệm.
inact: lượng bộ nhớ không hoạt động. (-a tùy chọn)
active: lượng bộ nhớ đang hoạt động. (-a option)
Swap
si: Lượng bộ nhớ được hoán đổi từ đĩa (/giây).
so: Lượng bộ nhớ được hoán đổi sang đĩa (/giây).
IO
bi: Các khối được nhận từ một thiết bị khối (khối/giây).
bo: Các khối được gửi đến một thiết bị khối (khối/giây).
System
in: Số lần ngắt mỗi giây, bao gồm cả xung nhịp.
cs: Số lần chuyển đổi ngữ cảnh mỗi giây.
CPU
Đây là phần trăm thời gian CPU tổng thể.
us: Thời gian dành cho việc chạy mã không phải hạt nhân. (thời gian của người dùng, bao gồm cả thời gian nice)
sy: Thời gian dành cho việc chạy mã hạt nhân. (thời gian của hệ thống)
id: Thời gian dành cho việc nhàn rỗi. Trước Linux 2.5.41, điều này bao gồm thời gian chờ IO.
wa: Thời gian dành cho việc chờ IO. Trước Linux 2.5.41, bao gồm trong chế độ nhàn rỗi.
st: Thời gian bị đánh cắp từ máy ảo. Trước Linux 2.6.11, không xác định.
Câu hỏi 2. Làm thế nào để vmstat tự động cập nhật đầu ra của nó?
Theo mặc định, vmstat tạo ra đầu ra một lần. Tuy nhiên, nếu bạn muốn vmstat tự động cập nhật đầu ra của nó, thì bạn có thể thực hiện điều đó bằng cách chỉ định một giá trị số làm đầu vào cho lệnh.Giá trị số này hoạt động như độ trễ (tính bằng giây) sau đó đầu ra được cập nhật. Ví dụ:
Mã:
vmstat 3
Mã:
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 410928 100276 1307480 0 0 5 17 49 70 0 0 100 0 0
0 0 0 410920 100284 1307480 0 0 0 181 108 143 0 0 100 0 0
0 0 0 410920 100292 1307480 0 0 0 7 92 132 0 0 100 0 0
0 0 0 410920 100292 1307480 0 0 0 0 87 124 0 0 100 0 0
...
...
...
Câu hỏi 3. Làm thế nào để vmstat hiển thị slabinfo?
Đối với slabinfo, bạn cần sử dụng tùy chọn dòng lệnh -m. Lưu ý rằng hạt nhân bản phân phối Linux của bạn cần hỗ trợ slabinfo để tùy chọn này hoạt động. Nếu có hỗ trợ, thì bạn cần chạy lệnh với quyền sudo.
Mã:
sudo vmstat -m
Mã:
Số bộ nhớ đệm Tổng kích thước Trang
ufs_inode_cache 0 0 808 40
qnx4_inode_cache 0 0 680 48
hfsplus_attr_cache 0 0 3840 8
hfsplus_icache 0 0 896 36
hfs_inode_cache 0 0 832 39
minix_inode_cache 0 0 672 48
ntfs_big_inode_cache 0 0 960 34
ntfs_inode_cache 0 0 296 55
jfs_ip 0 0 1280 25
xfs_dqtrx 0 0 528 31
xfs_dquot 0 0 496 33
xfs_buf 0 0 384 42
xfs_rui_item 0 0 696 47
xfs_rud_item 0 0 176 46
xfs_inode 0 0 1024 32
xfs_efd_item 0 0 440 37
xfs_buf_item 0 0 272 30
xfs_trans 0 0 232 35
xfs_da_state 0 0 480 34
xfs_btree_cur 0 0 224 36
...
...
...
Câu hỏi 4. Làm thế nào để vmstat báo cáo số liệu thống kê tóm tắt hoạt động của đĩa?
Sử dụng tùy chọn dòng lệnh -D cho việc này.
Mã:
vmstat -D
Mã:
10 đĩa
2 phân vùng
Tổng cộng 15066 lượt đọc
5937 lượt đọc được hợp nhất
1272794 sector được đọc
20063 milli lượt đọc
155026 lượt ghi
103687 lượt ghi được hợp nhất
4602472 sector được ghi
105279 milli lượt ghi
0 IO đang tiến hành
126 milli IO đã chi
Câu 5. Làm thế nào để vmstat thêm dấu thời gian vào mỗi dòng đầu ra?
Để đảm bảo lệnh vmstat thêm dấu thời gian vào mỗi dòng đầu ra, hãy sử dụng dòng lệnh -t:
Mã:
vmstat -t
Mã:
$ vmstat 2 -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st UTC
2 0 0 410116 100432 1308160 0 0 5 17 49 70 0 0 100 0 0 2020-05-08 09:40:05
0 0 0 410116 100432 1308160 0 0 0 88 100 136 0 0 100 0 0 2020-05-08 09:40:07
0 0 0 410116 100440 1308160 0 0 0 18 90 139 0 0 100 0 0 2020-05-08 09:40:09
0 0 0 410116 100440 1308160 0 0 0 0 93 126 0 0 100 0 0 2020-05-08 09:40:11
0 0 0 410368 100448 1308160 0 0 0 10 107 144 0 0 100 0 0 2020-05-08 09:40:13
0 0 0 410368 100448 1308160 0 0 0 0 86 122 0 0 100 0 0 2020-05-08 09:40:15
0 0 0 410368 100448 1308160 0 0 0 0 101 135 0 0 100 0 0 2020-05-08 09:40:17