性能分析經常使用工具

Linux 系統性能分析工具圖解讀(轉:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html)php

最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,這麼好的資料很差好學習一下實在是浪費了,又找到了大神的 ppt 和 演講(需爬牆),因而把相關的命令和概念連預習,學習,複習走了一遍。html

圖片加載失敗,點擊重試linux

首先學習的是大神提出的 Basic Tool 有以下幾個:ios

  • uptimegit

  • top (htop)github

  • mpstat算法

  • iostatshell

  • vmstat數據庫

  • free緩存

  • ping

  • nicstat

  • dstat

uptime

uptime 比較重要的能顯示當前系統的負載狀態,可是這個負載到底是什麼意思呢?查了一些資料負載指的是當前可運行的程序加上正在運行的程序再加上等待 IO 的程序,好比如今運行着一個,一個等待運行,還有一個等待 IO 那麼負載就是3. uptime 後面三個數分別是 1min, 5min 和 15min 的負載平均值,因爲內核用了一個指數平滑的平均算法,這個值不能直接反應當前等待的進程數。此外這個值沒對多核進行 normalization 因此單核狀況下當負載是 1 的時候說明 cpu 滿載了,可是對於 4 核 cpu 剛到滿負載的 25%。 通常狀況下這個值越大就說明等待 CPU 的進程越多,若是大於核數就說明有進程在等待 CPU,須要看一下程序的問題或者考慮加機器了。另外即便負載過載了也不必定說明 CPU 的利用率高,由於極可能是大量的請求 IO 的進程在等待,像一些數據庫服務,因此看完負載後還要針對應用場景綜合考量。

top & htop

top 實際上是一個至關全面的分析了仍是事實的,其餘不少命令能拿到的數據,top 一個命令就能夠拿到。可是他的一個問題就是自己的 overhead 比較大,若是系統負載自己就很大那麼可能就會卡住了。此外 top 可能會忽視掉那些生命週期很短的程序。top 的 manual 裏詳細介紹了每一個指標的意義,翻看一下仍是頗有收穫的。其中比較要關注的有 wa(io wait),查看是否是你的 IO 是瓶頸,還有 st (time stolen from this vm by the hypervisor) 這個指標會出如今虛擬機裏的系統中,表示的是你的虛擬機在等待真實物理機的 CPU 資源的時間。若是這個值很高的話說明你的服務提供商的 CPU 資源有限你沒搶過別人,頗有可能使服務商超賣了。碰到這種狀況要麼打客服投訴,或者多掏點銀子找個靠譜的運營商吧。

htop 是 top 的改進版,帶着各類顏色表示和百分比進度條,以及更豐富的功能,小夥伴們能夠嘗試一下。

mpstat

mpstat 能夠顯示出每一個 CPU 核心的工做狀況,其實也能夠在 top 裏輸入 1 看到。經過這個命令咱們能夠觀察是否是存在負載不均的現象,某個核心跑滿了,另外一個還在閒着,形成總體性能的降低。

iostat

加上 -x 參數後能夠看到幾乎所有的 io 指標,包括 tps, 請求 queue 的平均長度,平均處理時間, 磁盤帶寬利用率等等。每一個指標 manual 中都有詳細的解釋。

vmstat & free

vmstat 是一個展現內存總體使用狀況的命令,其中要關注一下 swpd 和 swap 的 in/out 。若是這一部分的數值過大,會頻繁的 IO 形成性能降低,要麼看看是否是程序內存泄露了,要麼就加內存吧。 memory 裏的 buffer 指的是寫磁盤緩衝區, 而 cache 能夠當成是讀文件的緩衝區。free也是相似的功能,不過只展現內存部分的內容。

ping

這個相對來講簡單一些,主要反映了主機間的延遲和連通性,不少時候也只能告訴咱們這些了。能夠嘗試一下 hping 有着指定端口,高級 tracerout 的功能。

nicstat

一個和 iostat 相似,不過是針對網卡的命令。

dstat

一個綜合了cpu、 memory、 IO、 network 的工具,能夠事實展現當前的系統資源利用狀況。

以上就是最基礎的命令了,高級一些的命令有:

  • sar

  • netstat

  • pidstat

  • strace

  • tcpdump

  • blktrace

  • iotop

  • slabtop

  • sysctl

  • /proc

圖片加載失敗,點擊重試

第一篇在這裏

第一篇講了一些最基礎的命令了,接下來在研究研究高級的命令:

  • sar

  • netstat

  • pidstat

  • strace

  • tcpdump

  • blktrace

  • iotop

  • slabtop

  • sysctl

  • /proc

sar

sar 是 System Activity Reporter 的意思,這是一個強大到髮指的工具,在第一篇中提到的那些工具的功能(cpu、 mem、 disk、 net),基本上 sar 均可以覆蓋到,不信的話能夠試一下 sar -A 1 1 看一下它都統計了哪些東西。此外 sar 能夠週期性的執行統計,不少系統級別的監控都是經過 sar 來作的。淘寶還專門本身開發了一個 tsar 在原有的系統級別的監控上增長了對應用的監控。

netstat

這個命令也是和網絡相關的,能夠查看 socket 的鏈接信息,好比創建了哪些 TCP 鏈接,他們的狀態是怎樣的,一個進程有多少連接。一般這個命令後面都會跟着 grep 或者 awk 的命令進行進一步處理。以致於有的 awk 的教程都會以 netstat 的輸出處理做爲樣例,好比耗子叔叔的 awk 簡明教程。此外這個命令還有一個 -s 的參數能夠統計不一樣的協議的數據包信息。

pidstat

其實要不是看到大神說有這個命令,我還覺得這個命令是 ps 的全稱。其實展現的東西也和 ps 相似,主要的區別在於 ps 只是一次提供系統進程狀態的一個快照,pidstat# 能夠指定進程提供定時屢次的統計信息,至關於你能夠更細粒度的 ps 了。這也是作監控的一個很好的工具,能夠針對特殊進程特殊關照。

strace

其實感受 strace 是一個更偏針對應用的性能工具,他能夠統計出進程進行了哪些系統調用,處理了哪些信號。也所以 strace 是一個分析程序實現的一個很好的工具,好比說你想知道 pidstat 中的信息都是從哪裏得到的就 strace pidstat |& grep open 就能夠知道它是打開了哪些文件獲取到信息的。因爲 strace 會將輸出打到標準錯誤中因此管道處理要記得加上 & 。這個命令是很強大,但問題是也及其消耗性能,通常狀況下慢一個數量級仍是會有的,因此只是分析的時候用一下,正常執行就不要了。

tcpdump

大名鼎鼎的 tcpdump 能夠將通過網卡的數據包保存下來一份以供 wireshark 這類軟件進一步進行分析。若是願意的話開啓網卡混雜模式也能夠捕獲同一網絡上其餘機器的數據包,也是黑客很喜歡的工具。和 strace 相似, tcpdump 的功能很強大,即便開了 filter 功能也很消耗性能,通常的生產機若是流量大的話開啓 tcpdump仍是吃不消的。固然有一些神祕的組織是須要獲取網絡包的完整備份的,他們大概是用專門的硬件完成的吧。

blktrace

其實這個命令用 btrace 展現會更好一些,看名字就知道是 strace 的 io 版,能夠實時的展現每次磁盤 IO 請求的內容,耗時,發生位置等等不少東西,不過帶 trace 的命令通常都比較耗性能。

iotop

和上個命令相似,一看就是 top 的 io 版,簡潔明瞭,包括展現都和 top 很相似,試一下就知道是怎麼回事了。

slabtop

其實只要知道 slab 是個什麼東西,這個命令就很好理解了。slab 是對象緩衝池,將一些經常使用的小的對象結構再釋放後緩存起來,而不是直接交給系統回收,這樣能夠避免頻繁的小對象找系統申請內存形成性能降低,知道這個再看 這條命令就很輕鬆了。

sysctl

這裏面是一些頗有講究的系統參數的設置,不少參數的設置都會對服務器的性能產生很大的影響。這也是個水很深的配置文件,好比 tcpreuse、tcprecycle 這些服務器的重要配置都在這裏面。這裏面的配置估計也能講上個幾天幾夜。仍是先 sysctl -a 看一下感覺感覺吧。

/proc

其實上述諸多的工具都是從這個文件加下面讀取文件作展現的,不過真要本身解析這裏面的文件仍是蠻耗功夫的,因此仍是好好用一下上面的那些命令吧。不過若是你對那些命令是如何實現的能夠配合着 strace 來探索這裏面的奧祕。

 

Reference

http://www.cnphp6.com/archives/93474

相關文章
相關標籤/搜索