Linux問題故障定位

CPU

針對應用程序,一般關注的是內核CPU調度器功能和性能。ios

線程的狀態分析主要是分析線程的時間用在什麼地方,而線程狀態的分類通常分爲:網絡

a. on-CPU:執行中,執行中的時間一般又分爲用戶態時間user和系統態時間sys。
b. off-CPU:等待下一輪上CPU,或者等待I/O、鎖、換頁等等,其狀態能夠細分爲可執行、匿名換頁、睡眠、鎖、空閒等狀態。socket

若是大量時間花在CPU上,對CPU的剖析可以迅速解釋緣由;若是系統時間大量處於off-cpu狀態,定位問題就會費時不少。tcp

//查看系統cpu使用狀況
top

//查看全部cpu核信息
mpstat -P ALL 1

//查看cpu使用狀況以及平均負載
vmstat 1

//進程cpu的統計信息
pidstat -u 1 -p pid

//跟蹤進程內部函數級cpu使用狀況
perf top -p pid -e cpu-clock

 

 

內存

內存出現問題可能不僅是影響性能,而是影響服務或者引發其餘問題函數

//查看系統內存使用狀況
free -m

//虛擬內存統計信息
vmstat 1

//查看系統內存狀況
top

//1s採集週期,獲取內存的統計信息
pidstat -p pid -r 1

//查看進程的內存映像信息
pmap -d pid

//檢測程序內存問題
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./程序名

 

 

磁盤IO

磁盤一般是計算機最慢的子系統,也是最容易出現性能瓶頸的地方,由於磁盤離 CPU 距離最遠並且 CPU 訪問磁盤要涉及到機械操做,好比轉軸、尋軌等。性能

//查看系統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
^C
perf report

 

 

網絡

網絡的監測是全部 Linux 子系統裏面最複雜的,有太多的因素在裏面,好比:延遲、阻塞、衝突、丟包等spa

//顯示網絡統計信息
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

 

 

系統負載

//查看負載狀況
uptime

top

vmstat

//統計系統調用耗時狀況
strace -c -p pid

//跟蹤指定的系統操做例如epoll_wait
strace -T -e epoll_wait -p pid

//查看內核日誌信息
dmesg

 

 

參考連接:https://www.jianshu.com/p/0bbac570fa4c線程

相關文章
相關標籤/搜索