熟悉運維的人員,可能經常會遇到系統的監控的報警。通過這些警報,我們們就會分析出系統的故障以及問題的根源,然后進行及時處理。那么Linux如何排查思路問題的?其實分析問題是需要贏經驗的,這也是提升運維工程師能力進步的方法之一。所以如果運維工程師擁有自己特有的分析方法,就可以快速處理問題。
分析問題的方法論
我們常用5W2H方法提出性能分析的問題
1.What-什么現象表現
2.When-什么時間出現
3.Why-為什么發生問題
4.Where-哪個組件性能發生問題
5.How much-消耗多少資源
6.How to do-如何解決問題
常見系統資源問題分析
針對目前服務器提供的應用服務,通常需要關注內核CPU調度器功能和性能。
主要是分析線程狀態,線程的時間用在什么地方。線程狀態的分類一般分為:
on-CPU:執行中,分為用戶態時間user和系統態時間sys。
off-CPU:等待,等待CPU、I/O、鎖、換頁等等,其狀態可以細分為可執行、匿名換頁、睡眠、鎖、空閑等狀態。
如果大量時間在on-CPU上,對CPU剖析能夠迅速定位問題原因。
如果大量時間處于off-CPU狀態,定位問題就會變得復雜費時。
舉例說明
查看系統cpu使用情況:
top
查看所有cpu核信息:
mpstat -P ALL 1
查看cpu使用情況及平均負載:
vmstat 1
某個進程cpu的統計信息:
pidstat -u 1 -p pid
跟蹤進程內部函數級cpu使用情況:
perf top -p pid -e cpu-clock
MEM
內存是為提高效率,實際分析問題的時候,內存出現問題可能不只是影響性能,而是影響服務或者引起其他的問題。
對于內存的一些概念需要清楚:
主存
緩存
虛擬內存
地址空間
OOM
LINUX內核級SLUB分配器
舉例說明
查看系統內存使用情況:
free -m
虛擬內存統計信息:
vmstat 1
查看系統內存情況:
top
獲取內存1s采集周期統計信息:
pidstat -p pid -r 1
查看進程的內存映像信息:
pmap -d pid
檢測程序內存問題:
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
DISK I/O
在SSD未成為主流之前,磁盤基本都是機械設備,通常是計算機最慢的子系統,也是容易出現性能瓶頸的設備,因為訪問磁盤要涉及到機械操作,訪問硬盤和訪問內存之間的速度差別是以數量級來計算的。
同樣對磁盤的一些概念需要理解:
文件系統
VFS
文件系統緩存
頁緩存page cache
緩沖區高速緩存buffer cache
目錄緩存
inode
舉例說明
查看系統io信息:
iotop
統計io詳細信息:
iostat -d -x -k 1 10
查看進程級io的信息:
pidstat -d 1 -p pid
查看系統io請求:
perf record -e block:block_rq_issue -ag
perf report
NETWORK
網絡監測是Linux子系統里面最復雜的,有太多太多的原因會引起系統問題,常見的如:延遲、阻塞、沖突、丟包等。而且連接服務器的路由器、交換機、無線設備都可能影響網絡,所以很難判斷是因為Linux系統網絡問題還是其它設備的問題。
舉例說明
顯示網絡統計信息:
netstat -s
顯示當前UDP連接狀況:
netstat -nu
顯示UDP端口號的使用情況:
netstat -apu
顯示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
以上就是關于Linux如何排查思路問題的全部內容,想了解更多關于Linux的信息,請繼續關注中培偉業。