CPU
概念
分析CPU時,主要分析CPU的調度以及性能。線程本身有很多種狀態:
狀態
備註
描述
R
running
S
sleeping
D
Disk sleep
Z
zombie
I
idle
但線程針對於CPU只有兩種狀態:
on-CPU:執行佔用CPU中,並且分爲用戶態時間user和系統態時間sys;
off-CPU:等待CPU,或者等待I/O,鎖,換頁等,具體狀態包括可執行,匿名換頁,睡眠,鎖,空閒等狀態。
相關概念
核數
硬件線程
時鐘頻率
CPI/IPC
用戶態時間/系統態時間
運行隊列
分析工具
工具
描述
top
監控每個進程的cpu用量
uptime
平均負載
vmstat
包括系統範圍的cpu平均負載
mpstat
查看所有cpu的核信息
sar -u
查看cpu信息
pidstat
查看進程cpu用量分解
perf
cpu剖析
使用方式
//查看系統cpu使用情況
// 1鍵查看所有核的使用率; P按照cpu佔用率進行排序;c顯示完整的命令
top
//查看所有cpu核信息
mpstat -P ALL 1
//查看cpu使用情況以及平均負載
vmstat 1
//進程cpu的統計信息
pidstat -u 1 -p pid
//跟蹤進程內部函數級cpu使用情況
內存
相關概念
物理內存
虛擬內存
常駐內存
虛擬地址空間
頁緩存
缺頁
換頁
用戶態內存分配器:libc,glibc,libmalloc,mtmalloc
內核態內存分配器:slub分配器。
分析工具
工具
描述
free
查看系統整體內存情況
vmstat
虛擬內存統計信息
top
查看每個進程內存佔用
pidstat
查看活動進程的內存佔用
pmap
查看進程的內存映像
sar -r
查看內存情況
dtrace
動態跟蹤
valgrind
內存檢查工具
使用方式
// M按照內存使用排序
top
//1s採集週期,獲取內存的統計信息
pidstat -p pid -r 1
//查看進程的內存映像信息
pmap -d pid
//檢測程序內存問題
valgrind --tool= memcheck --leak-check= full --log-file= ./log.txt ./程序名
IO
磁盤是系統中最慢的子系統。
相關概念
文件系統
VFS
文件系統緩存
頁緩存page cache
緩存區高速緩存buffer cache
目錄緩存
inode
inode緩存
noop調用策略
工具
工具
描述
iostat
磁盤詳細統計信息
iotop
按進程查看磁盤IO的使用情況
pidstat
按進程查看磁盤IO的使用情況
perf
跟蹤工具
使用方式
//查看系統io信息
iotop
//統計io詳細信息
iostat -d -x -k 1 10
//查看進程級io的信息
pidstat -d 1 -p pid
//查看系統IO的請求,比如可以在發現系統IO異常時,可以使用該命令進行調查,就能指定到底是什麼原因導致的IO異常
perf record -e block:block_rq_issue -ag
perf report
網絡
工具
工具
描述
ping
traceroute
跟蹤源主機和目標機直接的路由信息
netstat
查看進程和端口之間的統計數據,以及TCP/UDP等協議包的統計信息
ss
查看socket統計信息
tcpdump
tcpflow
tcp統計流
sar -n DEV
網卡流量情況
sar -n SOCK
查詢網絡以及TCP/UDP狀態信息
使用方式
//顯示網絡統計信息
netstat -s
//顯示當前UDP連接狀況
netstat -nu
//顯示UDP端口號的使用情況
netstat -apu
//統計機器中網絡連接各個狀態個數
netstat -a | awk '/^tcp/ {++S[$NF ]} END {for(a in S) print a, S[a]}'
//顯示TCP連接
ss -t -a
//顯示sockets摘要信息
ss -s
//顯示所有udp sockets
ss -u -a
//tcp,etcp狀態
sar -n TCP,ETCP 1
//查看網絡IO
sar -n DEV 1
//抓包以包爲單位進行輸出
tcpdump -i eth1 host 192.168.1.1 and port 80
//抓包以流爲單位顯示數據內容
tcpflow -cp host 192.168.1.1
系統負載
概念
系統負載可以簡單理解爲運行隊列的長度
工具
工具
描述
top
uptime
strace
跟蹤系統調用以及每個系統調用的執行時間
dmesg
查看系統日誌
使用
//查看負載情況
uptime
top
vmstat
//統計系統調用耗時情況
strace -c -p pid
//跟蹤指定的系統操作例如epoll_wait
strace -T -e epoll_wait -p pid
//查看內核日誌信息
dmesg
具體
查看當前系統整體負載:這時候最好不要直接上top,有可能會影響整體系統的情況。
uptime :查看系統1/5/15分鐘內的系統運行情況
CPU:
vmstat :查看等待執行的任務數和當前系統core的數量關係
mpstat : -P ALL 1 :查看CPU在各個層面的佔用率
pidstat :查看每個進程佔用CPU的具體情況
taskset :查看每個進程的親和性
內存
/proc/meminfo :查看系統內存的總體情況
free :同上
磁盤IO
iostat :-xz 1 : 查看所有磁盤的讀寫帶寬/讀寫請求數/設備使用率
r/s,w/s,rkB/s,wkB/s
分別表示每秒設備讀次數,寫次數,讀的KB數,寫的KB數。它們描述了磁盤的工作負載。也許性能問題就是由過高的負載所造成的
await
I/O平均時間,以毫秒作單位。它是應用中I/O處理所實際消耗的時間,因爲其中既包括排隊用時也包括處理用時。如果它比預期的大,就意味着設備飽和了,或者設備出了問題
avgqu-sz
分配給設備的平均請求數。大於1表示設備已經飽和了。(不過有些設備可以並行處理請求,比如由多個磁盤組成的虛擬設備)
%util
設備使用率。這個值顯示了設備每秒內工作時間的百分比,一般都處於高位。低於60%通常是低性能的表現(也可以從await中看出),不過這個得看設備的類型。接近100%通常意味着飽和.
網絡
sar :
-n DEV 1:查看網卡的讀寫帶寬情況
-n TCP,ETCP 1:Tcp協議的操作情況
中斷情況
/proc/interrupts :查看系統當前所有的中斷情況
Top命令:
查看線程執行在具體的core上 : top -H -> f/F鍵 -> “Last Used Cpu (SMP)”
按照CPU使用率排序 : -H
按照內存使用率排序 :-M
展示所有core的使用情況 :top -> 1鍵
trace
ftrace,編譯時使用-pg選項,會在函數入口處增加一條call mcount指令。
https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html