Home > Uncategorized > Dùng top và gnuplot vẽ biểu đồ quá trình sử dụng CPU của Linux server

Dùng top và gnuplot vẽ biểu đồ quá trình sử dụng CPU của Linux server

April 28, 2008

Cpu usage stats

Thông thường “quýnh” top ta se có những thông tin về CPU có dạng:

Cpu(s): 1.9%us, 0.9%sy, 0.0%ni, 96.6%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%st

và tùm lum tà la thứ nữa, nhưng ta chỉ cần mỗi dòng này

Xin giải thích ý nghĩa mấy chữ viết tắt:

– us: user mode

– sy: system (kernel) mode

– ni: nice (process with lower piority)

– id: idle

– wa: waiting (for IO device)

– hi : hardware interupt

– si: software interupt

– st: stolen (involuntary wait)

Vậy thì mình sẽ capture lại dữ liệu mà của top bằng command sau:

top -b -d 5 |grep –line-buffered ^Cpu > cpu.dat &

Thông tin về cpu usage sau mỗi 5 giây sẽ được lưu vào file cpu.dat. Hãy để cho process này chạy một thời gian cho đến khi bạn không muốn monitor nữa và lấy dữ liệu để vẽ hình.

Lúc này dữ liệu của mình sẽ giống giống thế này:
Cpu(s): 16.2%us, 10.8%sy, 0.0%ni, 72.6%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 20.0%us, 10.0%sy, 0.0%ni, 69.8%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Cpu(s): 10.0%us, 0.6%sy, 0.0%ni, 87.8%id, 1.6%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 55.5%us, 0.6%sy, 0.0%ni, 43.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 22.0%us, 0.4%sy, 0.0%ni, 77.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 60.0%us, 0.2%sy, 0.0%ni, 39.2%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 50.2%us, 0.4%sy, 0.0%ni, 49.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 44.0%us, 0.4%sy, 0.0%ni, 55.4%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 80.2%us, 1.0%sy, 0.0%ni, 18.2%id, 0.4%wa, 0.0%hi, 0.2%si, 0.0%st
Cpu(s): 12.7%us, 3.1%sy, 0.0%ni, 84.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Bây giờ mình sẽ dùng awk để lấy thông tin về %us, %sy và %id để vẽ đồ thị biểu diễn về sự “chiếm đoạt” cpu ở user mode, system mode và idle:

awk ‘BEGIN {FS=”[ %\t]+”}; {print $2 $4 $8}’ cpu.dat

Chú ý là awk command ở trên xem khoảng trắng, dấu phần trăm và tab là field-separator, nên phần dữ liệu của %sy sẽ là $4, của %id là $8.

Ta sẽ có output như thế này:

16.2 10.8 72.6
20.0 10.0 69.8
10.0 0.6 87.8
55.5 0.6 43.9
22.0 0.4 77.6
60.0 0.2 39.2
50.2 0.4 49.4
44.0 0.4 55.4
80.2 1.0 18.2
12.7 3.1 84.2

Dùng thêm command nl để có dữ liệu về thời gian:

awk ‘BEGIN {FS=”[ %\t]+”}; {print $2 $4 $8}’ cpu.dat |nl -i 5

Out put mới:

1 16.2 10.8 72.6
6 20.0 10.0 69.8
11 10.0 0.6 87.8
16 55.5 0.6 43.9
21 22.0 0.4 77.6
26 60.0 0.2 39.2
31 50.2 0.4 49.4
36 44.0 0.4 55.4
41 80.2 1.0 18.2
46 12.7 3.1 84.2

OK, dữ liệu này là sẵn sang để vẽ biểu đồ, hãy redirect vào plot.dat

awk ‘BEGIN {FS=”[ %\t]+”}; {print $2 $4 $8}’ cpu.dat |nl -i 5 > plot.dat

Bây giờ ta sẽ chạy gnuplot để plot nhé:

gnuplot> set terminal png

gnuplot> set output “cpu_stats.png”

gnuplot> plot “plot.dat” using 1:2 title “User” w l, “plot.dat” using 1:3 title “System” w l, “plot.dat” using 1:4 title “Idle” w l

Xong, mở file cpu_stats.png sẽ được cái biểu đồ cpu mình cần.

Cpu usage stats

Categories: Uncategorized Tags: , , , , , , ,
  1. tienve
    June 8, 2010 at 9:56 AM

    Em xin chào anh,
    bài viết của anh rất hay, em đã thực tập và đã làm được.
    Nhưng có vài con số em vẫn chưa hiểu từ đâu ra.
    Như dãy này “print $2 $4 $8” em nghĩ hoài mà vẫn ko hiểu.

    Em cũng muốn dùng gnuplot để biểu đồ của một chương trình.

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    3061 root 15 0 65900 15m 8868 S 2.0 3.2 0:19.93 gnome-terminal

    Trong đây em chỉ muốn vẽ 2 mục CPU và MEM …nhưng mò hoài vẫn ko ra :( anh giúp em với. Em xin cảm ơn anh

  1. June 3, 2008 at 9:24 AM
Comments are closed.
%d bloggers like this: