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