文章目錄 常見指標分類(USE法) 常見性能工具 CPU性能工具 內存性能工具 文件系統和磁盤I/O性能工具 網絡性能工具 根據指標找工具 根據工具找指標 CPU性能分析一般步驟 內存性能分析一般步驟 I/O性能分析一般步驟 網絡性能分析一般步驟 參考
常見指標分類(USE法)
資源 類型 性能指標 CPU 使用率 CPU使用率 CPU 飽和度 運行隊列長度或平均負載 CPU 錯誤數 硬件cpu錯誤數 內存 使用率 已用內存百分比或SWAP用量百分比 內存 飽和度 內存換頁量 內存 錯誤數 內存分配失敗或OOM 存儲設備I/O 使用率 設備I/O事件百分比 存儲設備I/O 飽和度 等待隊列產犢或延遲 存儲設備I/O 錯誤數 I/O錯誤數 文件系統 使用率 已用容量百分比 文件系統 飽和度 已用容量百分比 文件系統 錯誤數 文件讀寫錯誤數 網絡 使用率 帶寬使用率 網絡 飽和度 重傳報文數 網絡 錯誤數 網卡收發錯誤數、丟包數 文件描述符 使用率 已用文件描述符數百分比 連接跟蹤 使用率 已用連接跟蹤數百分比 連接數 飽和度 TIMEWAIT狀態連接數
常見性能工具
CPU性能工具
性能指標 性能工具 說明 平均負載 uptime、top、/proc/loadavg uptime最簡單;top提供更全的指標;/proc/loadavg常用于監控系統 系統CPU使用率 vmstat
, mpstat
, top
, sar
, /proc/stat
top、vmstat、mpstat只可以動態查看,而sar還可以記錄歷史數據;/proc/stat是其他性能工具的數據來源,也常用于監控 進程CPU使用率 top
, ps
, pidstat
, htop
, atop
top和ps可以按CPU使用率給進程排序,而pidstat只顯示實際用了CPU的進程;htop和atop以不同顏色顯示更直觀 系統上下文切換 vmstat
除了上下文切換次數,還提供運行狀態和不可中斷狀態的進程數 進程上下文切換 pidstat
注意加上-w參數 軟中斷 top
, mpstat
, /proc/softirqs
top提供軟中斷cpu使用率,而/proc/softirqs和mpstat提供了各種軟中斷在每個CPU上的運行次數 硬中斷 vmstat
, /proc/interrupts
vmstat提供總的中斷次數,而/proc/interrupts提供各種中斷在每個CPU上運行的累計次數 網絡 dstat
, sar
, tcpdump
dstat、sar提供總的網絡接受和發送情況,而tcpdump則是動態抓取正在進行的網絡通訊 I/O dstat
, sar
dstat和sar都提佛那個了I/O的整體情況 CPU緩存 perf
使用perf stat子命令 CPU數 lscpu
, /proc/cpuinfo
lscpu更直觀 事件剖析 perf
, 火焰圖, execsnoop
perf和火焰圖用來分析熱點函數以及調用棧,execsnoop用來監測短時進程 動態追蹤 ftrace
, bcc
, systemtap
ftrace用于跟蹤內核函數調用棧,而bcc和systemtap則用于跟蹤內核或應用程序的執行過程(注意bcc要求內核>=4.1)
內存性能工具
性能指標 性能工具 說明 系統已用、可用、剩余內存 free
, vmstat
, sar
, /proc/meminfo
free最為簡單,而vmstat、sar更為全面;/proc/meminfo是其他工具的數據來源,也常用于監控系統中 進程虛擬內存、常駐內存、共享內存 ps
, top
, pidstat
, /proc/pid/stat
, /proc/pid/status
ps和top最簡單,而pidstat則需要加上-r選項;/proc/pid/stat和/proc/pid/status是其他工具的數據來源,也常用于監控系統中 進程內存分布 pmap
, /proc/pid/maps
/proc/pid/maps是pmap的數據來源 進程SWAP換出內存 top
, /proc/pid/status
/proc/pid/status是top的數據來源 進程缺頁異常 ps
, top
, pidstat
注意給pidstat加上-r選項 系統換頁情況 sar
注意加上-B選項 緩存/緩沖區用量 free
, vmstat
, sar
, cachestat
vmstat最常用,而cachestat需要安裝bcc 緩存/緩沖區命中率 cachetop
需要安裝bcc SWAP已用空間和剩余空間 free
, sar
free最為簡單,而sar還可以記錄歷史 SWAP換入換出 vmstat
, sar
vmstat最為簡單,而sar還可以記錄歷史 內存泄漏檢測 memleak
, valgrind
memleak需要安裝bcc,valgrind還可以在舊版本(3.x)內核中使用 指定文件的緩存大小 pcstat
需要從源碼下載安裝
文件系統和磁盤I/O性能工具
性能指標 性能工具 說明 文件系統空間容量、使用量以及剩余空間 df
詳細文檔可以執行info coreutils 'df invocation’命令查看 索引節點容量、使用量以及剩余量 df
注意加上-i選項 頁緩存和可回收Slab緩存 /proc/meminfo
, sar
, vmstat
注意sar需要加上-r選項,而/proc/meminfo是其他工具的數據來源,也常用于監控系統 緩沖區 /proc/meminfo
, sar
, vmstat
注意sar需要加上-r選項,而/proc/meminfo是其他工具的數據來源,也常用于監控系統 目錄項、索引節點以及文件系統的緩存 /proc/slabinfo
, slabtop
slabtop更直觀,而/proc/slabinfo常用于監控 磁盤I/O使用率、IOPS、吞吐量、響應時間、I/O平均大小以及等待隊列長度 iostat
, sar
, dstat
, /proc/diskstats
iostat最為常用,注意使用iostat -d -x或sar -d選項;/proc/diskstats則是其他工具的數據來源,也常用于監控 進程I/O大小以及I/O延遲 pidstat
, iotop
注意使用pidstat -d選項 塊設備I/O事件跟蹤 blktrace
需要跟blkparse配合使用,比如blktrace -d /dev/sda -o- | blkparse -|- 進程I/O系統調用跟蹤 strace
, perf trace
strace只可以跟蹤單個進程,而perf trace還可以跟蹤所用進程的系統調用 進程塊設備I/O大小跟蹤 biosnoop
, biotop
需要安裝bcc 動態追蹤 ftrace
, bcc
, systemtap
ftrace用于跟蹤內核函數調用棧,而bcc和systemtap則用于跟蹤內核或應用程序的執行過程(注意bcc要求內核版本>= 4.1)
網絡性能工具
性能指標 性能工具 說明 吞吐量(BPS) sar
, nethogs
, iftop
, /proc/net/dev
分別可以查看網絡接口、進程以及IP地址的網絡吞吐量;/proc/net/dev常用于監控 吞吐量(PPS) sar
, /proc/net/dev
注意使用sar -n DEV選項 網絡連接數 netstat
, ss
ss速度更快 網絡錯誤數 netstat
, sar
注意使用netstat -s或者sar -n EDEV/EIP選項 網絡延遲 ping
, hping3
ping基于ICMP,而hping3基于TCP協議 連接跟蹤數 conntrack
, /proc/sys/net/netfilter/nf_conntrack_count
, /proc/sys/net/netfilter/nf_conntrack_mac
conntrack可用來查看所用連接跟蹤的相關信息,nf_conntrack_count只是連接跟蹤的數量,而nf_conntrack_mac則限制了總的連接跟蹤數量 路由 mtr
, traceroute
, route
route用于查詢路由表,而mtr和traceroute則用來排查和定位網絡鏈路中的路由問題 DNS dig
, nslookup
用于排查DNS解析的問題 防火墻和NAT iptables
用于排查防火墻及NAT的問題 網卡選項 ethtool
用于查看和配置網絡接口的功能選項 網絡抓包 tcpdump
, wireshark
通常在服務器中使用tcpdump抓包后再復制出來用wireshark的圖形界面分析 動態追蹤 ftrace
, bcc
, systemtap
ftrace用于跟蹤內核函數調用棧,而bcc和systemtap則用于跟蹤內核或應用程序的執行過程(注意bcc要求內核版本>= 4.1)
根據指標找工具
CPU性能
性能指標 性能工具 說明 平均負載 uptime、top uptime最簡單、top提供了更全的指標 系統整體CPU使用率 vmstat、mpstat、top、sar、/proc/stat top、vmstat、mpstat只可以動態查看,而sar還可以記錄歷史數據;/proc/stat是其他性能工具的數據來源,也常用于監控 進程CPU使用率 top、pidstat、ps、htop、atop top和ps可以按CPU使用率給進程排序,而pidstat只顯示實際用了CPU的進程;htop和atop以不同顏色顯示更直觀 系統上下文切換 vmstat 除了上下文切換次數,還提供運行狀態和不可中斷狀態的進程數 進程上下文切換 pidstat 注意加上-w參數 軟中斷 top、/proc/softirq、mpstat top提供軟中斷cpu使用率,而/proc/softirqs和mpstat提供了各種軟中斷在每個CPU上的運行次數 硬中斷 vmstat、/proc/interrupts vmstat提供總的中斷次數,而/proc/interrupts提供各種中斷在每個CPU上運行的累計次數 網絡 dstat、sar、tcpdump dstat、sar提供總的網絡接受和發送情況,而tcpdump則是動態抓取正在進行的網絡通訊 I/O dstat、sar dstat和sar都提佛那個了I/O的整體情況 CPU個數 /proc/cpuinfo、lscpu lscpu更直觀 事件剖析 perf、execsnoop per可以用來分析CPU的換粗以及內核調用棧,execsnoop用來監測短時進程
內存性能
性能指標 性能工具 系統已用、可用、剩余內存 free、vmstat、sar、/proc/meminfo 進程虛擬內存、常駐內存、共享內存 ps、top 進程內存分布 pmap 進程Swap換出內存 top、/proc/pid/status 進程缺頁異常 ps、top 系統換頁情況 sar 緩存/緩沖區用量 free、vmstat、sar、cachestat 緩存/緩沖區命中率 cachetop SWAP已用空間和剩余空間 free、sar Swap換入換出 vmstat 內存泄漏檢測 memleak、valgrind 指定文件的緩存大小 pcstat
文件系統和磁盤I/O
性能指標 性能工具 說明 文件系統空間容量、使用量以及剩余空間 df 詳細文檔見info coreutils ‘df invocation’ 索引節點容量、使用量以及剩余量 df 使用-i選項 頁緩存和可回收slab緩存 /proc/meminfo、sar、vmstat 使用sar -r選項 緩沖區 /proc/meminfo、sar、vmstat 使用sar -r選項 目錄項、索引節點以及文件系統的緩存 /proc/slabinfo、slabtop slabtop更直觀 磁盤I/O使用率、IOPS、吞吐量、響應時間、I/O平均大小以及等待隊列長度 iostat、sar、dstat 使用iostat -d -x或sar -d選項 進程I/O大小以及I/O延遲 pidstat、iotop 使用pidstat -d選項 塊設備I/O系統調用跟蹤 blktrace blktrace -d /dev/sda -o-|blkparse -i- 進程I/O系統調用跟蹤 strace 通過系統調用跟蹤進程I/O 進程塊設備I/O大小跟蹤 biosnoop、biotop 需要安裝bcc軟件包
網絡性能
性能指標 性能工具 說明 吞吐量(BPS) sar、nethogs、iftop 分別可以查看網絡接口、進程以及IP地址的網絡吞吐量 PPS sar、/proc/net/dev 查看網絡接口的PPS 連接數 netstat、ss 查看網絡連接數 延遲 ping、hping3 通過ICMP、TCP等測試網絡延遲 連接跟蹤數 conntrack 查看和管理連接跟蹤情況 路由 mtr、route、traceroute 查看路由并測試鏈路信息 DNS dig、nslookup 排查DNS解析問題 防火墻和NAT iptables 配置和管理防火墻及NAT規則 網卡功能 ethtool 查看和配置網絡接口的功能 抓包 tcpdump、wireshark 抓包分析網絡流量 內核協議棧跟蹤 bcc、systemtap 動態跟蹤內核協議棧的行為
根據工具找指標
CPU性能
性能工具 CPU性能指標 uptime 平均負載 top 平均負載、運行隊列、整體的CPU使用率以及每個進程的狀態和CPU使用率 htop top增強版,以不同顏色區分不同類型的進程 atop CPU、內存、磁盤和網絡等各種資源的全面監控 vmstat 系統整體的CPU使用率、上下文切換次數、中斷次數,還包括處于運行和不可中斷狀態的進程數量 mpstat 每個CPU的使用率和軟中斷次數 pidstat 進程和線程的CPU使用率、中斷上下文切換次數 /proc/softirq 軟中斷類型和在每個CPU上的累積中斷次數 /proc/interrupts 軟中斷類型和在每個CPU上的累積中斷次數 ps 每個進程的狀態和CPU使用率 pstree 進程的父子關系 dstat 系統整體的CPU使用率 sar 系統整體的CPU使用率,包括可配置的歷史數據 strace 進程的系統調用 perf CPU性能事件剖析,如調用鏈分析、CPU緩存、CPU調度等 execsnoop 監控短時進程
內存性能
性能工具 內存指標 free、/proc/meminfo 系統已用、可用、剩余內存以及緩存和緩沖區的使用量 top、ps 進程虛擬、常駐、共享內存以及缺頁異常 vmstat 系統剩余內存、緩存、緩沖區、換入、換出 sar 系統內存換頁情況、內存使用率、緩存和緩沖區用量以及Swap使用情況 cachestat 系統緩存和緩沖區的命中率 cachetop 進程緩存和緩沖區的命中率 slabtop 系統slab緩存使用情況 /proc/pid/status 進程swap內存等 /proc/pid/smaps、pmap 進程地址空間和內存狀態 valgrind 進程內存錯誤檢查器,用來檢測內存初始化、泄漏、越界訪問等各種內存錯誤 memleak 內存泄漏檢測 pcstat 查看指定文件的緩存情況
文件系統和磁盤I/O
性能工具 性能指標 性能工具 性能指標 iostat 磁盤I/O使用率、IOPS、吞吐量、響應時間、I/O平均大小以及等待隊列長度 blktrace 跟蹤塊設備I/O事件 pidstat 進程I/O大小以及I/O延遲 biosnoop 跟蹤進程的塊設備I/O大小 sar 磁盤I/O使用率、IOPS、吞吐量以及響應時間 biotop 跟蹤進程塊I/O并按照I/O大小排序 dstat 磁盤I/O使用率、IOPS以及吞吐量 strace 跟蹤進程的I/O系統調用 iotop 按I/O大小對進程排序 perf 跟蹤內核中的I/O事件 slabtop 目錄項、索引節點以及文件系統的緩存 df 磁盤空間和索引節點使用量和剩余量 /proc/slabinfo 目錄項、索引節點以及文件系統的緩存 mount 文件系統的掛在路徑以及掛載參數 /proc/meminfo 頁緩存和可回收的slab緩存 du 目錄占用的磁盤空間大小 /proc/diskstats 磁盤的IOPS、吞吐量以及延遲 tune2fs 顯示和設置文件系統參數 /proc/pid/io 進程IOPS、I/O大小以及I/O延遲 hdparam 顯示和設置磁盤參數 vmstat 緩存和緩沖區用量匯總
網絡性能
性能工具 主要功能 ifconfig、ip 配置和查看網絡接口 ss 查看網絡連接數 sar、/proc/net/dev/sys/class/net/eth0/statistics/ 查看網絡接口的網絡收發情況 nethogs 查看進程的網絡收發情況 iftop 查看IP的網絡收發情況 ethtool 查看和配置網絡接口 conntrack 查看和管理連接跟蹤情況 nslookup、dig 排查DNS解析問題 mtr、route、traceroute 查看路由并測試鏈路信息 ping、hping3 測試網絡延遲 tcpdump 網絡抓包工具 wireshark 網絡抓包和圖形界面分析工具 iptables 配置和管理防火墻及NAT規則 perf 剖析內核協議棧的性能 systemtap、bcc 動態追蹤內核協議棧的行為
CPU性能分析一般步驟
內存性能分析一般步驟
I/O性能分析一般步驟
網絡性能分析一般步驟
參考
Phoronix Test Suite OpenBenchmarking.org Linux 性能優化實戰 性能之巔