1. 程式人生 > >Linux程序實時監控監控工具

Linux程序實時監控監控工具

背景說明:

一、htop是TOP的增強版;

二、dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能產品;

三、perf是一款Linux效能分析工具。Linux效能計數器是一個新的基於核心的子系統,它提供一個性能分析框架,比如硬體(CPU、PMU(Performance Monitoring Unit))功能和軟體(軟體計數器、tracepoint)功能。=》效能剖析(performance profiling)和程式碼優化

四、iotop

 

一、htop

1、安裝GCC及其編譯的庫

如果沒有安裝gcc,按如下來安裝
yum install -y gcc

安裝後,編譯htop需要安裝一個編譯Linux核心的庫
yum install -y ncurses-devel

2、HTOP下載,編譯和安裝

htop下載
wget http://sourceforge.net/projects/htop/files/latest/download

解壓
tar -zxf download
cd htop-1.0.2
./configure && make && make install

執行./configure; 如果執行報錯   configure: error: You may want to use --disable-unicode or install libncursesw. , 表明缺少lib 包, 安裝lib包:yum install ncurses-devel 

3、htop 引數

鍵入htop 命令,開啟htop。

# htop

3

上面左上角顯示CPU、記憶體、交換區的使用情況,右邊顯示任務、負載、開機時間,下面就是程序實時狀況。

下面是 F1~F10 的功能和對應的字母快捷鍵。

Shortcut Key Function Key Description 中文說明
h, ? F1 Invoke htop Help 檢視htop使用說明
S F2 Htop Setup Menu htop 設定
/ F3 Search for a Process 搜尋程序
\ F4 Incremental process filtering 增量程序過濾器
t F5 Tree View 顯示樹形結構
<, > F6 Sort by a column 選擇排序方式
[ F7 Nice - (change priority) 可減少nice值,這樣就可以提高對應程序的優先順序
] F8 Nice + (change priority) 可增加nice值,這樣就可以降低對應程序的優先順序
k F9 Kill a Process 可對程序傳遞訊號
q F10 Quit htop 結束htop

命令列選項(COMMAND-LINE OPTIONS)

-C --no-color        使用一個單色的配色方案

-d --delay=DELAY     設定延遲更新時間,單位秒

-h --help           顯示htop 命令幫助資訊

-u --user=USERNAME    只顯示一個給定的使用者的過程

-p --pid=PID,PID…       只顯示給定的PIDs

-s --sort-key COLUMN     依此列來排序

-v –version          顯示版本資訊

互動式命令(INTERACTIVE COMMANDS)

上下鍵或PgUP, PgDn 選定想要的程序,左右鍵或Home, End 移動欄位,當然也可以直接用滑鼠選定程序;

Space    標記/取消標記一個程序。命令可以作用於多個程序,例如 "kill",將應用於所有已標記的程序

U    取消標記所有程序

s    選擇某一程序,按s:用strace追蹤程序的系統呼叫

l    顯示程序開啟的檔案: 如果安裝了lsof,按此鍵可以顯示程序所開啟的檔案

I    倒轉排序順序,如果排序是正序的,則反轉成倒序的,反之亦然

+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.

a (在有多處理器的機器上)    設定 CPU affinity: 標記一個程序允許使用哪些CPU

u    顯示特定使用者程序

M    按Memory 使用排序

P    按CPU 使用排序

T    按Time+ 使用排序

F    跟蹤程序: 如果排序順序引起選定的程序在列表上到處移動,讓選定條跟隨該程序。這對監視一個程序非常有用:通過這種方式,你可以讓一個程序在螢幕上一直可見。使用方向鍵會停止該功能。

K    顯示/隱藏核心執行緒

H    顯示/隱藏使用者執行緒

Ctrl-L    重新整理

Numbers    PID 查詢: 輸入PID,游標將移動到相應的程序上

4、htop 使用

4.1. 顯示自帶幫助

滑鼠點選Help或者按F1 顯示自帶幫助

4

4.2. htop 設定

滑鼠點選Setup或者按下F2 之後進入htop 設定的頁面,Meters 頁面設定了頂端的一些資訊顯示,頂端的顯示又分為左右兩側,到底能顯示些什麼可以在最右側那欄新增,要新增到上方左側(F5)或是右側(F6)都可以,這就是個人設定的範圍了。這裡多加了一個時鐘。

8

上方左右兩欄的顯示方式分為Text Bar Graph Led 四種,下圖我就把 cpu memory swap 改成文字模式顯示,然後右欄的改成Bar 顯示,clock 用LED方式顯示。資料顯示都差不多,只是這樣看有點不習慣了。

9

關於Display options 的設定,可要根據管理者自己的需要來設定。

10

顏色選擇,除了基本的顏色顯示之外,htop 還提供了換面板的功能,其實也只是改變一些色彩顯示的設定,雖然說不能自定義到細部的顏色顯示,但是至少提供了幾種風格可以選擇。

11

最後一項的設定是調整 Columns 的顯示,就是在一般htop 指令進來希望可以看到的什麼樣的資料及資訊,欄位的調整可以在這邊做個人化的設定,一般使用系統預設值就好了。

12

4.3. 搜尋程序

滑鼠點選Search 或者按下F3 或者輸入"/", 輸入程序名進行搜尋,例如搜尋ssh

5

4.4. 過濾器

按下F4,進入過濾器,相當於關鍵字搜尋,不區分大小寫,例如過濾dev

15

4.5. 顯示樹形結構

輸入"t"或按下F5,顯示樹形結構,意思跟pstree 差不多,能看到所有程式樹狀執行的結構,這對於系統管理來說相當方便,理清程式是如何產生的,當然樹狀結構的瀏覽也可以依照其他資料來排序。

6

4.6. 選擇排序方式

按下F6 就可以選擇依照什麼來排序,最常排序的內容就是cpu 和memory 吧!

13

4.7 操作程序

F7、F8分別對應nice-和nice+,F9對應kill給程序發訊號,選好訊號回車就OK了

14

4.8. 顯示某個使用者的程序,在左側選擇使用者

輸入"u",在左側選擇使用者

7

5、Alias top

也許你用慣了top,我們也可以用top來開啟htop。

編輯/root/.bashrc檔案,新增如下程式碼

if [ -f /usr/local/bin/htop ]; then
    alias top=’/usr/local/bin/htop’
fi

# source /root/.bashrc

二、dstat

1、安裝

官網下載地址:http://dag.wieers.com/rpm/packages/dstat

wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.6.7-1.rh7.rf.noarch.rpm
rpm -ivh dstat-0.6.7-1.rh7.rf.noarch.rpm

OR

yum install dstat

2、

安裝完後就可以使用了,dstat非常強大,可以實時的監控cpu、磁碟、網路、IO、記憶體等使用情況。

直接使用dstat,預設使用的是-cdngy引數,分別顯示cpu、disk、net、page、system資訊,預設是1s顯示一條資訊。可以在最後指定顯示一條資訊的時間間隔,如dstat 5是沒5s顯示一條,dstat 5 10表示沒5s顯示一條,一共顯示10條。

 dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  0   0  99   0   0   0|7706B  164k|   0     0 |   0     0 | 189   225
  0   0 100   0   0   0|   0     0 |4436B  826B|   0     0 | 195   248
  1   0  99   0   0   0|   0     0 |4744B  346B|   0     0 | 203   242
  0   0 100   0   0   0|   0     0 |5080B  346B|   0     0 | 206   242
  0   1  99   0   0   0|   0     0 |5458B  444B|   0     0 | 214   244
  1   0  99   0   0   0|   0     0 |5080B  346B|   0     0 | 208   242

CPU狀態:CPU的使用率。這項報告更有趣的部分是顯示了使用者,系統和空閒部分,這更好地分析了CPU當前的使用狀況。如果你看到"wait"一欄中,CPU的狀態是一個高使用率值,那說明系統存在一些其它問題。當CPU的狀態處在"waits"時,那是因為它正在等待I/O裝置(例如記憶體,磁碟或者網路)的響應而且還沒有收到。

磁碟統計:磁碟的讀寫操作,這一欄顯示磁碟的讀、寫總數。

網路統計:網路裝置傳送和接受的資料,這一欄顯示的網路收、發資料總數。

分頁統計:系統的分頁活動。分頁指的是一種記憶體管理技術用於查詢系統場景,一個較大的分頁表明系統正在使用大量的交換空間,或者說記憶體非常分散,大多數情況下你都希望看到page in(換入)和page out(換出)的值是0 0。

系統統計:這一項顯示的是中斷(int)和上下文切換(csw)。這項統計僅在有比較基線時才有意義。這一欄中較高的統計值通常表示大量的程序造成擁塞,需要對CPU進行關注。你的伺服器一般情況下都會執行執行一些程式,所以這項總是顯示一些數值。

下面對顯示出來的部分資訊作一些說明:

  1. cpu:hiq、siq分別為硬中斷和軟中斷次數。
  2. system:int、csw分別為系統的中斷次數(interrupt)和上下文切換(context switch)。

三、perf

perf top

預設情況下perf top是無法顯示資訊的,需要sudo perf top或者echo -1 > /proc/sys/kernel/perf_event_paranoid(在Ubuntu16.04,還需要echo 0 > /proc/sys/kernel/kptr_restrict)。

即可以正常顯示perf top如下:

第一列:符號引發的效能事件的比例,指佔用的cpu週期比例。

第二列:符號所在的DSO(Dynamic Shared Object),可以是應用程式、核心、動態連結庫、模組。

第三列:DSO的型別。[.]表示此符號屬於使用者態的ELF檔案,包括可執行檔案與動態連結庫;[k]表述此符號屬於核心或模組。

第四列:符號名。有些符號不能解析為函式名,只能用地址表示。

image

關於perf top介面常用命令如下:

h:顯示幫助,即可顯示詳細的幫助資訊。

UP/DOWN/PGUP/PGDN/SPACE:上下和翻頁。

a:annotate current symbol,註解當前符號。能夠給出組合語言的註解,給出各條指令的取樣率。

d:過濾掉所有不屬於此DSO的符號。非常方便檢視同一類別的符號。

P:將當前資訊儲存到perf.hist.N中。

 

perf top常用選項有:

-e <event>:指明要分析的效能事件。

-p <pid>:Profile events on existing Process ID (comma sperated list). 僅分析目標程序及其建立的執行緒。

-k <path>:Path to vmlinux. Required for annotation functionality. 帶符號表的核心映像所在的路徑。

-K:不顯示屬於核心或模組的符號。

-U:不顯示屬於使用者態程式的符號。

-d <n>:介面的重新整理週期,預設為2s,因為perf top預設每2s從mmap的記憶體區域讀取一次效能資料。

-g:得到函式的呼叫關係圖。

perf top --call-graph [fractal],路徑概率為相對值,加起來為100%,呼叫順序為從下往上。

perf top --call-graph graph,路徑概率為絕對值,加起來為該函式的熱度。

 image

 

四、iotop

Total DISK read:       0.00 B/s | Total DISK write:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    command
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init [3]
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
2572 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bluetooth]