LINUX常見性能監控工具總結

 

文章來源

工具功能概覽

整理了一個關於監控工具及其功能的表。下面對這些工具單獨詳細介紹。java

LINUX常見性能監控工具總結

Linux性能監控工具linux

top

top命令會展現進程的實際活動。默認狀況下,它會列出系統上全部cpu密集型任務,而且每5秒鐘刷新一次列表。能夠對PID(數值),生存時間(最新的排最前面),時間(累計時ios

間)以及常駐內存使用率和時間(進程啓動開始佔用cpu的時間)進行排序。緩存

LINUX常見性能監控工具總結

 

輸出中的各列:性能優化

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

vmstat顯示關於進程,內存,頁,塊I/O,traps和CPU的信息。vmstat既能夠展現平均值,也服務器

能夠是實時數據。經過提供採樣頻率和採樣時間就能夠開啓vmstat的採樣模式。網絡

LINUX常見性能監控工具總結

 

各列的含義以下: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

uptime

uptime 命令能夠用來查看服務器運行了多長時間,有多少用戶登陸在服務器上,以及服務器的平均負載。分別展現過去1分鐘、5分鐘和15分鐘的系統瓶頸負載值。

平均負載最理想的值是1,意味着每一個進程能夠直接使用CPU,沒有發生CPU週期丟失。不一樣系統的負載有很大差異。對單處理器工做站來講,1或2的負載值是勉強能夠接受的,而在多

處理器服務器上,平均負載爲8或者10的時候,系統依舊運行良好。

使用uptime或許能夠找出服務器或網絡的問題。例如,當網絡服務運行不佳時,你就能夠用uptime命令查看系統負載狀況。若是負載不高,問題可能出如今你的網絡中,而不是服務器系統上。

LINUX常見性能監控工具總結

 

ps 和 pstree

在系統分析中,ps和pstree是最基礎的命令,ps有三種不一樣的命令選項,UNIX、BSD和GNU

風格。

ps命令展現全部進程列表。top命令展現了進程活動,並且ps顯示的信息更加詳細。ps所顯示

出來的進程數量取決於所使用的命令參數。簡單的ps -A命令會列出全部的進程和他們各自的

PID,咱們可使用PID作更多的事情。在使用pmap,renice等工具的時候,就須要用到

PID。

在運行java應用的服務器上,使用ps -A命令可能一會兒就把顯示器所有佔滿了,很難清楚查

看運行進程的完整列表。在這個狀況下,pstree命令可能就會派上用場,它把運行進程以樹形

結構展現,把子進程合併展現(例如java線程)。

LINUX常見性能監控工具總結

 

其它的命令選項:

-e 全部進程,和-A同樣
-l 顯示長格式
-F 額外的全格式,包括參數和選項。
-H 顯示進程等級
-L 顯示線程,可能帶有LWP和NLWP列
-m 在進程後面顯示線程

使用以下命令能夠看到詳細的進程信息:

ps -elFL

LINUX常見性能監控工具總結

 

輸出的字段含義:

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

free命令顯示了系統全部已用和可用內存(包括swap)量。也包括被內核使用的緩衝和緩存

信息。

使用free命令的時候,記住Linux內存架構和虛擬內存管理器的工做方式。空閒內存是受限使

用的,使用swap也不表示出現了內存瓶頸。

下圖展現了free命令的基本原理。

LINUX常見性能監控工具總結

free命令基本原理

free命令的經常使用參數:

-b,-k,-m,-g 以字節b,千字節kb,兆字節mb和吉字節gb爲單位展現。

-l 顯示詳細的高低內存統計

-c 輸出free的次數

Memory used in a zone

LINUX常見性能監控工具總結

 

iostat

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字節,這是取決分區大小。

LINUX常見性能監控工具總結

 

sar

使用sar命令能夠收集、展現和保存系統信息。sar命令由三個部分組成:sar,顯示數據,sa1

和sa2,收集和存儲數據。sar工具是sysstat包的一部分。

LINUX常見性能監控工具總結

 

mpstat

mpstat是一個能夠展現多處理器服務器上每一個可用CPU活動信息的命令。全部CPU的平均活

動狀況也會顯示出來。mpstat也是sysstat包的一部分。

mpstat工具能夠全面展現系統或者CPU的統計信息。經過給mpstat傳遞採樣頻率和採樣次

數,能夠模擬vmstat的使用。下圖展現了經過mpstat -P ALL 來輸出每一個CPU的平均使用率。

LINUX常見性能監控工具總結

 

numastat

在企業數據中心,非統一內存架構(Non-Uniform Memory Architecture ,NUMA)已經變成主流,例如IBM System x3950,然而,NUMA系統給調優帶來了新的挑戰。在NUMA出現以前,咱們歷來不須要關心內存的位置。幸虧,企業Linux發行版爲監測NUMA架構行爲提供了工具。numastat命令提供本地和遠程內存使用率和全部節點的總體內存配置。本地內存分配失敗的信息在numa_miss一行展現,遠程內存(shower memory)分配信息在numa_foregin一行展現。過分的使用遠程內存會增長風險,可能致使總體性能降低。把進程綁定映射本地內存的節點會增長性能。

LINUX常見性能監控工具總結
 

pmap

pmap命令會展現一個或多個進程正在使用的內存量。使用這一工具,你能夠肯定服務器上的

哪個進程正在分配內存,還有是否這部份內存致使了內存瓶頸。更多信息,使用pmap -d 1選項。

LINUX常見性能監控工具總結

 最後一行顯示的信息最爲有用:

mapped 該進程映射到文件的內存量。
writable/private 該進程使用的私有地址空間。
shared 該進程和其它進程共享的地址空間量。

netstat

netstat 是最經常使用的工具之一,若是你從事網絡工做,你應該對這個命令很熟悉。它會展現網

絡相關的信息,例如socket使用,路由,接口,協議和其它網絡統計。

LINUX常見性能監控工具總結

 

有以下的基礎選項:

-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

iptraf監控和展現TCP/IP的實時流量。它能夠根據各個session、接口、協議展現TCP/IP流量

統計。iptraf組件是由iptraf包提供。

iptraf給咱們展現以下的報告:

IP流量監控:經過TCP鏈接的網絡流量統計
接口通常統計:網絡接口流量統計
接口詳細統計:根據端口的網絡流量統計
統計分析:根據TCP/UDP端口和包大小的網絡流量統計。
局域網統計:根據網絡2層地址的網絡流量統計。

tcmpdump / ethereal

tcpdump和ethereal一般用來抓取和分析網絡流量。這兩個工具都會用到libpcap庫來抓取包。

在混雜模式下,它們會監控網卡上的全部流量,而且抓取全部網卡上收到的分片。爲了抓取

全部包,這些命令應該使用超級用戶權限執行,以便開啓網卡混雜模式。

你可使用這些工具來找到和網絡相關的問題。能夠發現TCP/IP重傳,滑動窗口大小變化,

名字解析問題、網絡錯誤配置等。記住,這些工具只能監控全部到達網卡的分片,而不是所

有的網絡流量。

一、tcpdump

tcpdump是一個簡單和強大的工具。它擁有基本的協議分析能力,能夠得到網絡上的大致情

況。tcpdump可使用不少選項和擴展表達式來過濾要抓取的包。入門能夠看看以下的幾個選項:

-i 指定網絡接口
-e 打印數據鏈路層頭
-s 抓取每一個包的字節
-n 避免DNS解析
-w 寫入文件
-r 從文件讀取
-v,-vv,-vvv 詳細輸出

抓取過濾器的表達式:

關鍵字:

源目主機,源目端口,tcp,udp,icmp,源目網絡等等

聯合邏輯使用

非 ('!'或者'not')
與 ('&&'或者'and')
或 ('||'或者'or')
LINUX常見性能監控工具總結

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

nmon

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

strace命令會攔截和記錄進程的系統調用或進程接收到的信號。這是一個有用的診斷、教學和

調試工具。它在解決程序遇到的問題方面頗有價值。

使用時,須要指定要監控的進程ID:

strace -p <pid>

LINUX常見性能監控工具總結

 

Proc文件系統

proc文件系統不是真實的文件系統,可是它真的十分有用。它不是存儲數據的;而是提供運

行內核的監控和操做接口。proc文件系統讓管理員能夠監控和修改運行中的內核。下圖展現

了一個簡單的proc文件系統。大多數Linux性能工具都要依賴於/proc提供的信息。

LINUX常見性能監控工具總結

 

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方面的內容,感興趣的朋友能夠關注下!!

LINUX常見性能監控工具總結
相關文章
相關標籤/搜索