linux 系統監控命令

linux系統監控有如下命令:linux

uptime:顯示系統負載狀況
ios

mpstat:顯示 CPU 性能
nginx

free:顯示內存使用狀況
web

vmstat:顯示虛擬內存使用狀況
express

iostat:顯示系統 I/O 活動
apache

netstat:顯示網絡的活動
ubuntu

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 21秒顯示一次,共顯示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

常見用法

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查詢的深度

相關文章
相關標籤/搜索