Friday, November 7, 2014

vmstat

Vmstat là một tool tập hợp và report data về tài nguyên sử dụng memory, swap, và processor trong thời gian thực. Vmstat có thể được sử dụng để xác định các về đề về hiệu năng liên quan đến memory sử dụng.

1. Cú pháp lệnh
Sử dụng: vmstat -h

[root@mail ~]# vmstat -h
usage: vmstat [-V] [-n] [delay [count]]
-V prints version.
-n causes the headers not to be reprinted regularly.
-a print inactive/active page stats.
-d prints disk statistics
-D prints disk table
-p prints disk partition statistics
-s prints vm table
-m prints slabinfo
-t add timestamp to output
-S unit size
delay is the delay between updates in seconds.
unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
count is the number of updates.

Ví dụ:

[root@mail ~]# vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 139040 110084 165852 307224 0 0 1 6 4 5 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 20 63 82 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 40 75 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 38 72 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 39 77 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 37 72 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 42 79 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 41 81 0 0 100 0
Theo ví dụ trên, chúng ta lấy report 1s/ lần, và số lần lấy report là 100 lần. (Mỗi dòng là 1 lần)

Mặc định, vmstat hiển thị thống kê memory theo kilobytes, để hiển thị theo megabyte ta thêm ‘-S m’


2. Phân tích output

Vmstat mô tả trạng thái hiện tại của một hệ thống Linux. Thông tin về trạng thái hoạt động của một hệ thống rất hữu ích khi xử lý các vấn đề liên quan đến hiệu năng.

Output của lệnh vmstat được hiển thị trong một số trường: Dòng đầu tiên của output là trung bình các thông số khi hệ thống được restart. Chúng ta có thể bỏ qua dòng này vì nó ko hiển thị trạng thái hiên tại của hê thống.

a. Procs

Dữ liệu procs báo cáo số processing jobs chờ để run và cho phép bạn xác định xem có các process làm cho hệ thống của bạn bị chậm lại hay ko?

+Cột r hiển thị tổng số processing jobs chờ để truy cập vào processor. Nếu quan sát nhiều lần và thấy giá trị này vào khoảng = 2 lần CPU => có hiện tượng thắt cổ chai

+Cột b hiển thị tổng số processes trong trạng thái ‘sleep’

Nếu các giá trị của các cột r và b thường xuyên cao (=2*CPU), điều đó có nghĩa hệ thống không có đủ cpu hoặc memory hoặc i/o bandwidth.

b. Memory

Thông tin được hiển thị trong phần memory cung cấp dữ liệu về memory sử dụng như lệnh: free –m

+Cột swapd hay swapped báo cáo có bao nhiêu memory được trao đổi sang swap file hoặc swap partition.

+Cột free báo cáo số memory không được cấp phát.

Nếu bạn thấy giá trị trong cột free thường xuyên = 0, thât tồi tệ, bạn đã hết RAM rồi đó.

+Cột buff or buffers báo cáo số lượng memory được cấp phép sử dụng. Buff là phần memory được sử dụng giống như ” Virtual Disk”, nếu kernel đọc dữ liệu từ ổ cứng, nó sẽ thử giữ lại trong memory để đọc lại khi cần.

+Cột cache báo cáo số lượng memory được cấp phép mà có thể được swap tới disk hoặc không được cấp phép nếu tài nguyên được cần cho một task khác.

Nếu giá trị swapd là quá cao và tiếp tục thay đổi, có nghĩa là hệ thống đang chạy với bộ nhớ kém.

c. Swap

Swap báo cáo tỷ lệ mà memory đã gửi hoặc đã lấy từ hệ thống swap. vmstat cho phép bạn xác định có bao nhiêu disk hoạt động ddwwocj liên quan tới hệ thống swap.

+Cột si báo cáo số memory mà được chuyển từ swap tới memory thực trên giây.

+Cột so báo cáo số memory được chuyển tới swap từ memory thực trên giây.

Nếu bạn thấy các giá trị trong cột si và so thay đổi liên tục, nghĩa là hệ thống của bạn liên tục phân trang bộ nhớ vào ổ cứng => điều đó có nghĩa là bạn ko có đủ RAM hoặc bạn cần ít chương trình chạy vào thời điểm đó hơn.

Bạn có thể tìm chính xác chương trình nào đang ăn RAM nhiều bằng lệnh: ps -eo pmem,pcpu,args | sort -k 1 -r | less

d. I/O

Io báo cáo số lượng input và output hoạt động trên giây trong các hệ số của các block được đọc và được ghi

+Cột bi báo cáo số block được nhận (block in) từ một đĩa / giây

+Cột bo báo cáo số block được gửi (block out) tới một đĩa / giây

Nếu chúng ta nhìn thấy một vài số lớn trong cột b của proc và i/o cao, vấn đề nằm ở i/o

e. System

System báo cáo số lượng các toán tử hệ thống / giây

+Cột in báo cáo số hệ thống ngắt trên / giây, bao gồm các ngắt từ hệ thống đồng hộ.

+Cột cs báo cáo số lượng các thiết bị chuyển mạch ngữ cảnh mà hệ thống làm theo thứ tự để xử lý tất cả nhiệm vụ.

f. CPU

CPU section báo cáo sử dụng tài nguyên CPU của hệ thống. Hiển thị theo phần trăm.

+Cột us báo cáo số lượng thời gian mà processor cần trên các nhiệm vụ không thuộc kernel.

+Cột sy báo cáo lương thời gian mà processor tiêu tốn trên các nhiệm vụ liên quan đến kernel.

+Cột id báo cáo lương time mà processor dành trên idle. (Thời gian máy tính ko làm gì)

+Cột wa báo cáo lương time mà processor dành cho các hoạt động IO để hoàn thành trước khi tiếp tục xử lý các nhiệm vụ khác.

Nếu trong khi chạy vmstat, bạn thấy giá trị idle gần bằng 0, bạn có thể có vấn đề (CPU không rỗi), thông thường nó có nghĩa là chương trình ăn quá nhiều RAM và CPU phải phân trang từ memory tới swap và phân trang ngược lại