歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux的系統監控命令介紹

linux系統監控有以下命令:

uptime:顯示系統負載情況

mpstat:顯示 CPU 性能

free:顯示內存使用情況

vmstat:顯示虛擬內存使用情況

iostat:顯示系統 I/O 活動

netstat:顯示網絡的活動

df/du:顯示磁盤使用情況

1. uptime

fdipzone@ubuntu:~$ uptime  
 00:06:00 up 32 min,  2 users,  load average: 0.00, 0.03, 0.07

00:06:00 表示當前時間

32min 表示系統運行時間

2 users 表示當前用戶數

load average: 0.00, 0.03, 0.07 分別表示過去1, 5, 15 分鐘內的系統負載。

只有一個參數 -V 顯示uptime的版本

fdipzone@ubuntu:~$ uptime -V  
procps version 3.2.8

2. mpstat

顯示系統CPU各種性能信息,並可以對單個CPU進行統計。

用法: mpstat [ 選項 ] [ <時間間隔> [ <次數> ] ]  
選項:  
[ -A ] [ -I { SUM | CPU | ALL } ] [ -u ] [ -P { <cpu> [,...] | ALL } ] [ -V ]

顯示所有CPU的信息,每1秒執行一次,共執行2次。

mpstat -P ALL 1 2

-P ALL 顯示所有CPU的統計信息

-P 0 顯示第一個CPU的統計信息,以此類推。

參數 1 2 表示每1秒執行一次,共執行2次,如果2這個參數不輸入,則會一直執行下去,直到用戶中斷。

fdipzone@ubuntu:~$ mpstat -P ALL 1 2  
Linux 2.6.32-21-generic (ubuntu)    Friday, March 28, 2014  _x86_64_    (2 CPU)  
       
04:09:28 HKT  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle  
04:09:29 HKT  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00  
04:09:29 HKT    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00  
04:09:29 HKT    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00  
       
04:09:29 HKT  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle  
04:09:30 HKT  all    0.42    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.58  
04:09:30 HKT    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00  
04:09:30 HKT    1    0.72    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.28  
       
平均時間:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle  
平均時間:  all    0.25    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.75  
平均時間:    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00  
平均時間:    1    0.51    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.49

每一列的含義:

%usr     表示處理用戶進程所使用 CPU 的百分比,用戶進程是用於應用程序的非內核進程

%nice     表示使用 nice 命令對進程進行降級時 CPU 的百分比

%sys   表示內核進程使用的 CPU 百分比

%iowait   表示等待進行 I/O 所使用的 CPU 時間百分比

%irq      表示用於處理系統中斷的 CPU 百分比

%soft     表示用於軟件中斷的 CPU 百分比

%steal  必須要等待其他cpu(虛擬cpu)的時間

%guest  執行虛擬cpu的時間

%idle     顯示 CPU 的空閒時間

%intr/s   顯示每秒 CPU 接收的中斷總數

3. free

fdipzone@ubuntu:~$ free -h  
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]  
  -b,-k,-m,-g 按 KB, MB, or GB 顯示  
  -l 顯示詳細的高和低內存統計  
  -o 使用舊格式,沒有-/+ buffers/cache這一項  
  -t 顯示RAM+swap的總數  
  -s 每x秒更新  
  -c 更新x次  
  -V 顯示版本
fdipzone@ubuntu:~$ free  
             total       used       free     shared    buffers     cached  
Mem:       1022644     904668     117976          0      96872     369652  
-/+ buffers/cache:     438144     584500  
Swap:      1046524          0    1046524

Mem:物理內存統計

total:總內存數

used:已分配的內存

free:空閒內存

shared:共享內存,一般系統不會用到

buffers:系統已分配,但未使用的buffer 數量

cached:系統已分配,但未使用的cached 數量

-/+ buffers/cache:物理內存的緩存統計

used:used-buffers-cached = 實際使用的內存總量

free:未被使用的buffers 與 cache 和空閒的內存之和,即系統當前實際可用內存

swap:表示硬盤上交換分區的使用情況

4. vmstat

vmstat 共有兩個參數,一個是每次采集的時間間隔,另一個是采集的次數。

vmstat 1 11 表示每次采集時間為1秒,共采集11次。因為vmstat第一次采集的記錄是不正確的,所以如果要采集10次,請設置次數為11,這樣才可以獲取到10條有用的記錄。

fdipzone@ubuntu:~$ vmstat 1 11    
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----    
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa    
 0  0      0 335240  52072 241320    0    0   689    42  234  460  4 13 80  3    
 1  0      0 335860  52072 241320    0    0     0     0  352  528  2  2 97  0    
 2  0      0 336364  52072 241320    0    0     0     0  564  692  4  3 94  0    
 0  0      0 336992  52072 241320    0    0     0     0  316  483  1  2 97  0    
 2  0      0 336432  52076 241476    0    0   156     0  332  554  2  6 91  2    
 0  0      0 336928  52084 241480    0    0     0    84  349  494  1  3 96  0    
 0  0      0 337564  52084 241476    0    0     0     0  263  437  0  2 98  0    
 0  0      0 338068  52084 241476    0    0     0     0  299  456  1  2 97  0    
 0  0      0 338696  52084 241476    0    0     0     0  321  473  1  3 96  0    
 1  0      0 339200  52084 241476    0    0     0     0  271  461  0  2 98  0    
 0  0      0 339828  52084 241476    0    0     0     0  255  429  1  2 96  0

vmstat 輸出的每個參數說明:

r 表示運行隊列(就是說多少個進程真的分配到CPU),當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b 表示阻塞的進程。

swpd 虛擬內存已使用的大小,如果大於0,表示你的機器物理內存不足了,如果不是程序內存洩露的原因,那麼你該升級內存了或者把耗內存的任務遷移到其他機器。

free   空閒的物理內存的大小,我的測試機器內存總共1G,剩余330M。

buff   Linux/Unix系統是用來存儲,目錄裡面有什麼內容,權限等的緩存,我本機大概占用500多M

cache cache直接用來記憶我們打開的文件,給文件做緩沖,(這裡是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

si  每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存洩露了,要查找耗內存進程解決掉。

so  每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。

bi  塊設備每秒接收的塊數量,這裡的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte。

bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

in 每秒CPU的中斷次數,包括時間中斷

cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千並發甚至幾萬並發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。

us 用戶CPU時間,高於70%則表示CPU有壓力。

sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。

id  空閒 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。

wt 等待IO CPU時間。

5. iostat

iostat 主要用於監控系統設備的IO負載情況,用戶可以通過制定統計的次數和時間來獲取統計信息。

Usage: iostat [ options ] [ <interval> [ <count> ] ]  
Options are:  
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ]  
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

參數說明:

-d 顯示設備(磁盤)使用狀態

-k 某些使用block為單位的列強制使用Kilobytes為單位

iostat -d -k 1 2 每1秒顯示一次,共顯示2次

fdipzone@ubuntu:~$ iostat -d -k 1 2  
Linux 2.6.32-21-server (nmgwww34)       Friday, March 28, 2014  _x86_64_        (2 CPU)  
       
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
sda               9.88        15.67       122.85  379571972 2975248356  
       
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
sda               0.00         0.00         0.00          0          0

輸出信息的說明

tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。

"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合並為"一次I/O請求"。"一次傳輸"請求的大小是未知的。

kB_read/s:每秒從設備(drive expressed)讀取的數據量

kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量

kB_read:讀取的總數據量

kB_wrtn:寫入的總數量數據量;這些單位都為Kilobytes

如果有多個磁盤,可以指定顯示某一磁盤的信息

iostat -d sda 1 2

-x 該選項將用於顯示和io相關的擴展數據

fdipzone@ubuntu:~$ iostat -x 1 2  
Linux 2.6.32-21-server (nmgwww34)       Friday, March 28, 2014  _x86_64_        (2 CPU)  
       
avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           1.50    0.00    0.62    0.08    0.00   97.79  
       
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util  
sda               0.55    21.77    0.94    8.94    31.34   245.70    28.05     0.04    4.12   0.45   0.44  
       
avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           1.74    0.00    0.00    0.00    0.00   98.26  
       
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util  
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

輸出信息的說明

rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合並Merge)

wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了

rsec/s:每秒讀取的扇區數

wsec/s:每秒寫入的扇區數

rKB/s:The number of read requests that were issued to the device per second

wKB/s:The number of write requests that were issued to the device per second

avgrq-sz: 平均請求扇區的大小

avgqu-sz: 是平均請求隊列的長度,隊列長度越短越好

await:  每一個IO請求的處理的平均時間(單位是微秒毫秒)。這裡可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了

這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題

svctm :   表示平均每次設備I/O操作的服務時間(以毫秒為單位)。

如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢

%util: 在統計時間內所有處理IO時間,除以總共統計時間。

例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的並發能力,所以磁盤使用未必就到了瓶頸)

-c 用來獲取CPU部分狀態值

fdipzone@ubuntu:~$ iostat -c 1 2  
Linux 2.6.32-21-server (nmgwww34)       Friday, March 28, 2014  _x86_64_        (2 CPU)  
       
avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           1.50    0.00    0.62    0.08    0.00   97.79  
       
avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.00    0.00    0.00    0.00    0.00  100.00

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

常見用法

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盤讀寫速度單位為KB)  
iostat -d -m 2            #查看TPS和吞吐量信息(磁盤讀寫速度單位為MB)  
iostat -d -x -k 1 10      #查看設備使用率(%util)、響應時間(await)  
iostat -c 1 10            #查看cpu狀態

6. netstat

netstat 用於檢測網絡信息,命令格式如下:

netstat [-a][-e][-n][-o][-p Protocol][-r][-s][Interval]

參數說明:

-a 顯示所有socket,包括正在監聽的。  
-c 每隔1秒就重新顯示一遍,直到用戶中斷它。  
-i 顯示所有網絡接口的信息,格式“netstat -i”。  
-n 以網絡IP地址代替名稱,顯示出網絡連接情形。  
-r 顯示核心路由表,格式同“route -e”。  
-t 顯示TCP協議的連接情況  
-u 顯示UDP協議的連接情況。  
-v 顯示正在進行的工作。  
-p 顯示指定協議信息。  
-b 顯示在創建每個連接或偵聽端口時涉及的可執行程序。  
-e 顯示以太網統計。此選項可以與 -s 選項結合使用。  
-f 顯示外部地址的完全限定域名(FQDN)。  
-o 顯示擁有的與每個連接關聯的進程 ID。  
-s 顯示每個協議的統計。  
-x 顯示 NetworkDirect 連接、偵聽器和共享端點。  
interval 重新顯示選定的統計,各個顯示間暫停的間隔秒數。按 CTRL+C 停止重新顯示統計。如果省略,則 netstat 將打印當前的配置信息一次。

常用參數:

netstat -s

本選項能夠按照各個協議分別顯示其統計數據。如果你的應用程序(如Web浏覽器)運行速度比較慢,或者不能顯示Web頁之類的數據,那麼你就可以用本選項來查看一下所顯示的信息。你需要仔細查看統計數據的各行,找到出錯的關鍵字,進而確定問題所在。

netstat -e

本選項用於顯示關於以太網的統計數據,它列出的項目包括傳送數據報的總字節數、錯誤數、刪除數,包括發送和接收量(如發送和接收的字節數、數據包數),或有廣播的數量。可以用來統計一些基本的網絡流量。

netstat -r

本選項可以顯示關於路由表的信息,類似於後面所講使用routeprint命令時看到的信息。除了顯示有效路由外,還顯示當前有效的連接。

netstat -a

本選項顯示一個所有的有效連接信息列表,包括已建立的連接(ESTABLISHED),也包括監聽連接請求(LISTENING)的那些連接。

netstat -n

顯示所有已建立的有效連接。

netstat -p

顯示協議名查看某協議使用情況。

常見狀態:

LISTEN       偵聽來自遠方的TCP端口的連接請求

SYN-SENT     在發送連接請求後等待匹配的連接請求

SYN-RECEIVED 在收到和發送一個連接請求後等待對方對連接請求的確認

ESTABLISHED  代表一個打開的連接

FIN-WAIT-1   等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認

FIN-WAIT-2   從遠程TCP等待連接中斷請求

CLOSE-WAIT   等待從本地用戶發來的連接中斷請求

CLOSING      等待遠程TCP對連接中斷的確認

LAST-ACK     等待原來的發向遠程TCP的連接中斷請求的確認

TIME-WAIT    等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認

CLOSED       沒有任何連接狀態

7. df & du

df 查看系統容量

du 查看文件夾及文件容量

使用方式:

du -h --max-depth=1 folder  
df -h  
du --max-depth=1 folder|sort -nr

參數說明:

-h 以可讀性較好的方式顯示尺寸(例如:1K 234M 2G)

--max-depth=N N查詢的深度

Copyright © Linux教程網 All Rights Reserved