針對應用程序,一般關注的是內核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 ./程序名
磁盤一般是計算機最慢的子系統,也是最容易出現性能瓶頸的地方,由於磁盤離 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線程