Linux資源分析工具雜談

2021-09-05 13:07:01 字數 3543 閱讀 2680

linux資源分析工具雜談

表1. 電腦科學中的延時

軟體發展到今天可謂日新月異,短短的幾十年中極大的提高了人類的生產力。伴隨著軟體功能的發展,軟體的複雜度也在幾何級的增長,從經濟性的角度來講,人們總是希望投入更少的硬體資源,更少的電力,更少的時間來完成更多的生產任務,人們期望自己的每一度電,每一分鐘時間都在用在有意義的生產活動中。面對複雜的軟體,我們如何知道軟體在做有意義的事情而不是在無意義的阻塞,或者系統的哪一部分確實存在效能瓶頸,比如記憶體太小,硬碟太慢,cpu太慢等等。系統效能分析可以在不同的維度進行審視,常用的維度有負載分析和資源分析,本文希望從資源分析的角度對相關的工具進行討論。

中國有句古話,工欲善其事,必先利其器,人類文明進步的最重要的標誌就是可以在對的時候使用對的工具。但是問題來了,什麼是對的時候使用對的工具?前人對問題總結後分成了三類,第一種是理解問題,也知道如何解決問題,第二種是理解問題,但是以個人的能力無法解決問題,第三類問題是不知道問題的存在,更不知道如何解決問題。第一種問題和第二種問題我們稱之為基礎問題,因為我們可以通過個人能力或者團隊合作解決這類問題,第三種問題未知的未知才是我們需要重點關注的問題,理論上來說,在乙個成熟的軟體開發周期中,不允許存在未知的未知,我們需要對系統的各個層次都有透徹的理解和深入的把握。

當今世界的三大主流作業系統linux, windows nt, mac os都提供了系統的工具集來監控,排查各類效能問題,比如windows平台上mark russinovich的sysinternals工具集,windbg工具集,linux 平台上的sysstat工具集, brendan gregg力推的dtrace工具集。為了解決已知和未知的問題,我們首先需要對作業系統和硬體的相關指標有乙個基礎的認識,否則即使有了適合的工具,統計出了詳盡的結果,我們仍然無法透徹的理解軟體和系統發生了什麼。如圖1所示是效能分析大神brendan gregg對常用的效能分析工具進行的詳盡總結。

圖1. linux performance tools

基礎篇

下面我們對圖1中的一些常用基礎分析工具以及應用場景進行簡單的分析。常用的效能分析工具包括:uptime, vmstat, mpstat, sar, ps, top, pidstat等等,這些命令的簡單描述請見表2。

表2. 常用效能分析工具簡單描述

系統發生cpu效能問題時通常第乙個使用的命令是uptime和top,uptime命令輸出系統過去1分鐘,5分鐘和15分鐘的平均負載,通過這三個數值可以粗略的分析出系統過去15分鐘內負載是降低了,公升高了,或者是持平,uptime執行結果如圖2所示。

圖2. uptime執行結果

多核系統分析中接下來要使用的命令通常是mpstat,我們可以通過mpstat對cpu的每個核的使用情況都進行監控,mpstat不僅可以對每個核心的資料進行分別統計,還可以對所有核心的平均使用情況進行統計,mpstat執行結果如圖3所示。

圖3. mpstat執行結果

當我們使用top發現某乙個程序的cpu或者其他資源使用異常的時候,我們可能需要引入第三個命令pidstat,我們甚至可以將這一統計資料精確到具體的執行緒。top和pidstat執行結果見圖4和圖5。

圖4. top執行結果

圖5. pidstat分執行緒執行結果

當我們需要對tcp流量進行簡單統計,又不願意要引入更複雜的tcpdump網路監控的時候,sar命令是個不錯的選擇,當然,統計網路流量只是sar的乙個功能而已,更多功能可以參考sar man page, 使用sar命令統計tcp流量執行結果如圖6所示。

圖6. sar命令統計tcp流量執行結果

限於篇幅的原因,此處不再一一討論圖1中的每乙個命令。

高階篇

動態追蹤是一種高階除錯技術可以幫助開發人員以非常低的成本快速排查和解決軟體效能問題。當今世界軟體面臨的問題一是規模,二是複雜度。隨著 bpf 追蹤系統(基於時間取樣)最後乙個主要功能被合併至 linux 4.9-rc1 版本的核心中,linux核心擁有了類似dtrace的原生追蹤功能。dtrace是solaris系統中的高階追蹤器,功能強大,對於長期使用 dtrace 的使用者,這是乙個振奮人心的訊息,現在linux系統上可以在生產環境中使用安全的、低負載的定製追蹤系統,通過執行時間的柱狀圖和頻率統計等資訊,分析應用的效能以及核心。最初用於linux的追蹤專案有很多,但是這個最終被合併進linux核心的技術從一開始就根本不是乙個追蹤專案:它最開始是用於伯克利包過濾器 berkeley packet filter(bpf)的乙個增強功能。這些補丁允許bpf重定向資料報,從而建立軟體定義網路。久而久之,對事件追蹤的支援就被新增進來了,使得程式追蹤可用於linux系統。bpf compiler collection (bcc), ply 和 bpftrace都是正在開發的bpf前端,bcc架構如圖7所示,下面以bcc為例對linux動態追蹤技術進行簡單說明,

圖7. linux bcc/bpf tracing tools

假設我們有這樣乙個場景,系統中偶爾會執行新的程序,這些新的程序可能會消耗大量系統資源,從而對我們生產上執行的環境產生干擾,但是這種程序可能執行時間極為短暫,我們怎樣才能知道發生了這種情況呢?top?可能不行,時間太短了,可能top還沒來得及統計,程序已經退出了。這種情況下最適合使用的工具之一就是bcc工具集中的execsnoop,圖8中可以看出,每乙個新啟動的程序都會被記錄在案。

圖8. execsnoop命令執行結果

網路程式開發中我們可能想要按照tcp連線來統計一下通訊兩端的吞吐量和生命週期,這個時候tcplife就派上用場了,tcplife對tcp會話的生命週期和吞吐量統計如圖9所示。

圖9. tcplife命令執行結果

對於乙個給定的程序,我們甚至可以要求核心通過bpf統計cpu處理之外時間的核心和使用者堆疊,具體使用方法和示例請見圖10。

圖10 offcputime命令執行結果

KRPANO資源分析工具

krpano資源分析工具包含以下功能功能 一鍵批量解密被krpano protect tool加密的xml js檔案。js檔案反混淆,脫殼以及美化。無需開啟伺服器的情況下,實時預覽本地krpano專案。krpano專案強力加密功能,提供高強度加密,防止被軟體破解。分析工具群 571171251 版本...

Linux資源監視工具 Bashtop

輕量化的主機資源監視器,顯示處理器,記憶體,磁碟,網路和程序的使用情況和狀態。支援主流linux發行版ubuntu,debian,fedora,centos arch等,和macos,介面美觀,比top更強大實用。依賴環境 bash 4.4或更高版本 git gnu coreutils gnu se...

linux 程式分析工具

寫在最前面 在開始本文之前,筆者認為先有必要介紹一下linux下的man,如果讀者手頭用linux系統,直接在終端輸入man man便可以看到詳細的說明,我在這裡簡單的總結一下,man命令是用來檢視linux下各種命令 工具等的使用者手冊 manual 的。一種比較常用的用法是 man n fiel...