針對應用程式,通常關注的是核心cpu排程器功能和效能。
執行緒的狀態分析主要是分析執行緒的時間用在什麼地方,而執行緒狀態的分類一般分為:
a.on-cpu:執行中,執行中的時間通常又分為使用者態時間user和系統態時間sys。
b.off-cpu:等待下一輪上cpu,或者等待i/o、鎖、換頁等等,其狀態可以細分為可執行、匿名換頁、睡眠、鎖、空閒等狀態。
如果大量時間花在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
記憶體出現問題可能不只是影響效能,而是影響服務或者引起其他問題
//檢視系統記憶體使用情況
free -m
//虛擬記憶體統計資訊
vmstat 1
//檢視系統記憶體情況
top//
1s採集週期,獲取記憶體的統計資訊
pidstat -p pid -r 1
//檢視程序的記憶體映像資訊
pmap -d pid
//檢測程式記憶體問題
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程式名
磁碟通常是計算機最慢的子系統,也是最容易出現效能瓶頸的地方,因為磁碟離 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
^cperf report
網路的監測是所有 linux 子系統裡面最複雜的,有太多的因素在裡面,比如:延遲、阻塞、衝突、丟包等
//顯示網路統計資訊
netstat -s
//顯示當前udp連線狀況
netstat -nu
//顯示udp埠號的使用情況
netstat -apu
//統計機器中網路連線各個狀態個數
netstat -a | awk '
/^tcp/ end '//
顯示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
topvmstat
//統計系統呼叫耗時情況
strace -c -p pid
//跟蹤指定的系統操作例如epoll_wait
strace -t -e epoll_wait -p pid
//檢視核心日誌資訊
dmesg
linux 定位系統異常負載故障思路
定位系統異常負載故障思路 top看程序的id號 舉例php cgi 經過上圖,我們發現,有兩個php cgi程序的cpu資源佔用率過高,pid分別是10059,11570,這一般都是程式優化不夠造成,如何定位問題的php程式位置?2.找出程序所使用的檔案 proc 檔案系統儲存在記憶體中,主要儲存系...
Linux網路問題定位工具
分類 network 本文將linux中使用到的網路問題定位工具進行了初步彙總。linux nc命令 netcat是網路工具中的 瑞士軍刀 短小精悍 功能實用,簡單 可靠。可通過tcp或udp協議傳輸讀寫資料。也是乙個網路應用debug分析器,因為它可以根據需要建立各種不同型別的網路連線。tcpdu...
故障定位 利用gdb給Linux動態庫打熱補丁
一 前言 對linux下elf檔案格式的分析是linux攻防的基礎。掌握elf檔案的格式分析,不僅僅是學習別人如何攻擊軟體的目的,更多的我們應該利用知識幫助解決實際問題。例如linux有些故障很難復現,如果出了問題,重新換軟體版本,很可能就復現不了了。於是在出現故障時,不重啟應用 程序 的前提下,給...