整理了一個關於監控工具及其功能的表。下面對這些工具單獨詳細介紹。java
Linux性能監控工具linux
top命令會展現進程的實際活動。默認狀況下,它會列出系統上全部cpu密集型任務,而且每5秒鐘刷新一次列表。能夠對PID(數值),生存時間(最新的排最前面),時間(累計時ios
間)以及常駐內存使用率和時間(進程啓動開始佔用cpu的時間)進行排序。緩存
輸出中的各列:性能優化
PID 進程號 USER 進程全部者的名字。 PRI 進程優先級 NI nice級別 SIZE 進程使用的內存(代碼、數據和棧),kb單位 RSS 物理RAM使用量,kb單位 SHARE 和其它進程共享的內存,kb單位 STAT 進程狀態:S=睡眠,R=運行,T=中止或跟蹤,D=不可中斷的睡眠,Z=殭屍。 %CPU CPU使用量。 %MEM 物理內存用量 TIME 進程使用的總CPU時間(從啓動開始算) COMMAND 進程的命令行啓動命令(包括參數)
vmstat顯示關於進程,內存,頁,塊I/O,traps和CPU的信息。vmstat既能夠展現平均值,也服務器
能夠是實時數據。經過提供採樣頻率和採樣時間就能夠開啓vmstat的採樣模式。網絡
各列的含義以下:session
進程多線程
r:等待執行時間的進程數
b:在不可中斷睡眠中的進程數
內存架構
swpd:已使用的虛擬內存量
free:空閒內存量
buff:做爲緩衝的內存
cache:做緩存的內存
Swap
si:從交換分區寫到內存的量
so:從內存寫到交換分區的大小
IO
bi:發往塊設備的數目(blocks/s)
bo:從塊設備接收的塊數目 (blocks/s)
System
in:每秒鐘的中斷次數,包括時鐘
cs:每秒的上下文切換次數
CPU(總CPU時間的百分比):
us:運行非內核代碼的時間(用戶時間,包括nice時間) sy:運行內核代碼的時間(系統時間) id:空閒時間,早先的Linux2.5.41版本,包含了I/O等待時間 wa:等待IO的時間,早先的Linux2.5.41版本,這個值爲0
uptime 命令能夠用來查看服務器運行了多長時間,有多少用戶登陸在服務器上,以及服務器的平均負載。分別展現過去1分鐘、5分鐘和15分鐘的系統瓶頸負載值。
平均負載最理想的值是1,意味着每一個進程能夠直接使用CPU,沒有發生CPU週期丟失。不一樣系統的負載有很大差異。對單處理器工做站來講,1或2的負載值是勉強能夠接受的,而在多
處理器服務器上,平均負載爲8或者10的時候,系統依舊運行良好。
使用uptime或許能夠找出服務器或網絡的問題。例如,當網絡服務運行不佳時,你就能夠用uptime命令查看系統負載狀況。若是負載不高,問題可能出如今你的網絡中,而不是服務器系統上。
在系統分析中,ps和pstree是最基礎的命令,ps有三種不一樣的命令選項,UNIX、BSD和GNU
風格。
ps命令展現全部進程列表。top命令展現了進程活動,並且ps顯示的信息更加詳細。ps所顯示
出來的進程數量取決於所使用的命令參數。簡單的ps -A命令會列出全部的進程和他們各自的
PID,咱們可使用PID作更多的事情。在使用pmap,renice等工具的時候,就須要用到
PID。
在運行java應用的服務器上,使用ps -A命令可能一會兒就把顯示器所有佔滿了,很難清楚查
看運行進程的完整列表。在這個狀況下,pstree命令可能就會派上用場,它把運行進程以樹形
結構展現,把子進程合併展現(例如java線程)。
其它的命令選項:
-e 全部進程,和-A同樣 -l 顯示長格式 -F 額外的全格式,包括參數和選項。 -H 顯示進程等級 -L 顯示線程,可能帶有LWP和NLWP列 -m 在進程後面顯示線程
使用以下命令能夠看到詳細的進程信息:
ps -elFL
輸出的字段含義:
F 進程標誌 S 進程狀態:S=睡眠,R=運行,T=中止或跟蹤, D=不可中斷的睡眠,Z=殭屍。 UID 擁有進程的用戶名字。 PID 進程ID PPID 父進程ID LWP LWP號(light weight process,or thread,輕量級進程,或線程)。 c 處理器使用的百分比。 NLWP 進程中的lwps(線程)個數。 PRI 進程優先級 NI nice級別(進程是否經過nice改變優先級,見下文) ADDR 進程地址空間(例子中沒展現) SZ 進程使用的內存大小(代碼+數據+棧) ,單位kb。 WCHAN 睡眠進程的內核函數名字,若是進程在運行,顯示「-」,若是顯示爲「*」,則表示 是多線程。 RSS 駐留內存大小,任務所使用的非swap物理內存大小,單位是kb。 PSR 分配給進程的處理器個數。 STIME 命令開始時間 TTY 終端 TIME 進程從啓動開始,使用CPU的總時間 CMD 開啓任務的命令(包含參數)
free命令顯示了系統全部已用和可用內存(包括swap)量。也包括被內核使用的緩衝和緩存
信息。
使用free命令的時候,記住Linux內存架構和虛擬內存管理器的工做方式。空閒內存是受限使
用的,使用swap也不表示出現了內存瓶頸。
下圖展現了free命令的基本原理。
free命令基本原理
free命令的經常使用參數:
-b,-k,-m,-g 以字節b,千字節kb,兆字節mb和吉字節gb爲單位展現。
-l 顯示詳細的高低內存統計
-c 輸出free的次數
Memory used in a zone
iostat命令顯示從系統啓動依賴的平均CPU時間(和uptime相似)。它會生成服務器磁盤子系
統的活動報告:CPU和磁盤設備利用狀況。使用iostat找出詳細的I/O瓶頸,進行性能優化,詳
見「找到磁盤瓶頸」一節內容。iostat是sysstat包裏的一個組件。
CPU使用報告有4個部分:
%user 顯示CPU在用戶級執行應用程序所花時間的百分比。
%nice 顯示帶有nice優先級的用戶級程序佔用的CPU時間百分比(詳見「nice,renice一
節」)。
%sys 顯示顯示執行系統級(內核)任務所佔用CPU時間的百分比。
%idle 顯示CPU空閒的時間百分比。
設備使用報告包括以下部分:
Device 塊設備的名字
tps 設備上的每秒傳輸次數(每秒的I/O請求數)。多個單I/O請求能夠合成一個傳輸請
求,由於每一個傳輸請求的大小能夠是不同的。
Blk_read/s,Blk_wrtn/s 每秒塊讀寫顯示了每秒從設備讀或者寫的數據。塊也能夠有不一樣的
大小。常見的是1024,2048和4096字節,這是取決分區大小。
使用sar命令能夠收集、展現和保存系統信息。sar命令由三個部分組成:sar,顯示數據,sa1
和sa2,收集和存儲數據。sar工具是sysstat包的一部分。
mpstat是一個能夠展現多處理器服務器上每一個可用CPU活動信息的命令。全部CPU的平均活
動狀況也會顯示出來。mpstat也是sysstat包的一部分。
mpstat工具能夠全面展現系統或者CPU的統計信息。經過給mpstat傳遞採樣頻率和採樣次
數,能夠模擬vmstat的使用。下圖展現了經過mpstat -P ALL 來輸出每一個CPU的平均使用率。
在企業數據中心,非統一內存架構(Non-Uniform Memory Architecture ,NUMA)已經變成主流,例如IBM System x3950,然而,NUMA系統給調優帶來了新的挑戰。在NUMA出現以前,咱們歷來不須要關心內存的位置。幸虧,企業Linux發行版爲監測NUMA架構行爲提供了工具。numastat命令提供本地和遠程內存使用率和全部節點的總體內存配置。本地內存分配失敗的信息在numa_miss一行展現,遠程內存(shower memory)分配信息在numa_foregin一行展現。過分的使用遠程內存會增長風險,可能致使總體性能降低。把進程綁定映射本地內存的節點會增長性能。
pmap命令會展現一個或多個進程正在使用的內存量。使用這一工具,你能夠肯定服務器上的
哪個進程正在分配內存,還有是否這部份內存致使了內存瓶頸。更多信息,使用pmap -d 1選項。
最後一行顯示的信息最爲有用:
mapped 該進程映射到文件的內存量。 writable/private 該進程使用的私有地址空間。 shared 該進程和其它進程共享的地址空間量。
netstat 是最經常使用的工具之一,若是你從事網絡工做,你應該對這個命令很熟悉。它會展現網
絡相關的信息,例如socket使用,路由,接口,協議和其它網絡統計。
有以下的基礎選項:
-a 顯示全部的socket信息 -r 顯示路由信息 -i 顯示網絡接口統計 -s 顯示網絡協議統計
Socket信息解釋:
Proto socket使用的協議(tcp,udp,raw)。
Recv-Q 表示收到的數據已經在本地接收緩衝,可是還有多少沒有被進程取走,單位是字
節。
Send-Q 對方沒有收到的數據或者說沒有Ack的,仍是本地緩衝區,單位字節。
Local Address socket的本地地址和端口。除非使用--numeric(-n)選項,socket地址會被
解釋成主機名(FQDN),端口號會被轉成相應的服務名字。
Foreign Address 遠端socket的端口和地址。
State socket的狀態。由於raw和UDP一般是沒有狀態的,因此這列多是空白。
iptraf監控和展現TCP/IP的實時流量。它能夠根據各個session、接口、協議展現TCP/IP流量
統計。iptraf組件是由iptraf包提供。
iptraf給咱們展現以下的報告:
IP流量監控:經過TCP鏈接的網絡流量統計 接口通常統計:網絡接口流量統計 接口詳細統計:根據端口的網絡流量統計 統計分析:根據TCP/UDP端口和包大小的網絡流量統計。 局域網統計:根據網絡2層地址的網絡流量統計。
tcpdump和ethereal一般用來抓取和分析網絡流量。這兩個工具都會用到libpcap庫來抓取包。
在混雜模式下,它們會監控網卡上的全部流量,而且抓取全部網卡上收到的分片。爲了抓取
全部包,這些命令應該使用超級用戶權限執行,以便開啓網卡混雜模式。
你可使用這些工具來找到和網絡相關的問題。能夠發現TCP/IP重傳,滑動窗口大小變化,
名字解析問題、網絡錯誤配置等。記住,這些工具只能監控全部到達網卡的分片,而不是所
有的網絡流量。
一、tcpdump
tcpdump是一個簡單和強大的工具。它擁有基本的協議分析能力,能夠得到網絡上的大致情
況。tcpdump可使用不少選項和擴展表達式來過濾要抓取的包。入門能夠看看以下的幾個選項:
-i 指定網絡接口 -e 打印數據鏈路層頭 -s 抓取每一個包的字節 -n 避免DNS解析 -w 寫入文件 -r 從文件讀取 -v,-vv,-vvv 詳細輸出
抓取過濾器的表達式:
關鍵字:
源目主機,源目端口,tcp,udp,icmp,源目網絡等等
聯合邏輯使用
非 ('!'或者'not') 與 ('&&'或者'and') 或 ('||'或者'or')
DNS查詢包
二、ethereal
ethereal有和tcpdump類似的功能,可是更加複雜,而且擁有更高級的協議分析和報告能力。
它還擁有一個GUI接口和ethereal命令行界面。
和tcpdump相似,ethereal也可使用過濾抓取,從而縮小抓取分片的範圍。以下是一些經常使用
的表達式。
IP
ip.version ==6 and ip.len > 1450 ip.addr == 129.111.0.0/16 ip.dst eq www.example.com and ip.src == 192.168.1.1 not ip.addr eq 192.168.4.1
TCP/UDP
tcp.port eq 22 tcp.port == 80 and ip.src == 192.168.2.1 tcp.dstport == 80 and (tcp.flags.syn == 1 or tcp.flags.fin == 1) tcp.srcport == 80 and (tcp.flags.syn == 1 and tcp.flags.ack == 1) tcp.dstport == 80 and tcp.flags == 0x21
應用層
http.request.method == "POST "
smb.path contains \SERVERSHARE
Nigel's Monitor簡稱nmon,是由Nigel Griffiths開發的監控Linux系統性能的經常使用工具。因爲nmon能監控多個子系統的性能信息,因此,能夠把它做爲性能監控的惟一工具。經過nmon能夠獲取的信息有:處理器利用率、內存利用率、運行隊列信息、磁盤I/O統計和網絡I/O統計,頁活動信息和進程指標。
nmon輸出的CSV文件能夠導入電子表格應用中,生成可視化圖形報告,要使用該功能,啓動nmon的時候須要帶上-f選項。例如使用以下命令,讓nmon生成30秒鐘爲頻率,總時長1小時的報告。
# nmon -f -s 30 -c 120
strace命令會攔截和記錄進程的系統調用或進程接收到的信號。這是一個有用的診斷、教學和
調試工具。它在解決程序遇到的問題方面頗有價值。
使用時,須要指定要監控的進程ID:
strace -p <pid>
proc文件系統不是真實的文件系統,可是它真的十分有用。它不是存儲數據的;而是提供運
行內核的監控和操做接口。proc文件系統讓管理員能夠監控和修改運行中的內核。下圖展現
了一個簡單的proc文件系統。大多數Linux性能工具都要依賴於/proc提供的信息。
proc文件系統下的信息和佈局:
/proc目錄下的文件
/proc根目錄下的各類文件裏面包含相關係統的統計。你能夠找到Linux工具使用的信息
源,例如vmstat和cpuinfo文件。
數字1到X
各個數字的子目錄指向的是運行進程或者它們的進程ID(PID)。目錄結構老是已PID 1
開始,指向的是init進程,而後是系統上運行的各個PID。每一個數字子目錄下保存進程相
關的統計信息。例如進程映射的虛擬內存。
acpi
ACPI意思是高級配置與電源接口(advanced configuration and power interface),,受 到大多數現代桌面和筆記本系統支持。因爲ACPI主要是PC技術,因此在服務器上一般是 禁用狀態。
總線(bus)
這個子目錄包含總線子系統的信息,例如PCI總線或者系統USB接口。
irq
irq目錄包含系統中斷的信息。這個目錄下的每一個子目錄表明一次中斷,也多是一個附
加設備,例如網卡。在irq子目錄下,你能夠修改一個給定中斷的CPU關聯(affinity)
net
網絡子目錄下包含網絡接口的原始統計數據,例如收到的多播包或接口的路由。
scsi
scsi子目錄包含系統上關於SCSI子系統的信息,例如附加設備或者驅動調整。
sys
在sys子目錄下,是可調整的內核參數,例如虛擬內存管理器或者是網絡棧的行爲。
tty
虛擬終端和附加的物理設備信息都包含在tty子目錄中
篇幅有限,關於linux性能監控工具就大概介紹到這了,你們有空能夠本身測試下,後面會分享更多linux方面的內容,感興趣的朋友能夠關注下!!