sar工具在監控性能方向的實踐

2020-12-13 蘇寧科技

1、背景介紹

任何軟體在正式發布前,都會對相對應的接口進行性能壓測,以確保軟體在高強度的壓力下,能夠滿足用戶的操作,避免系統卡死等異常的現象。特別是在大促進行之前,性能測試及調優就顯得格外重要。

以某系統正式環境為例,該系統壓測接口透傳,不涉及資料庫,機器分布:

涉及一臺nginx和一臺jboss伺服器。

針對該系統,可以通過linux系統自帶的工具包,進行監控,查看性能指標。

測試環境伺服器資源

Nuginx:

Cpu/內存/磁碟:2C/2G/0G

Jboss:

Cpu/內存/磁碟:4C/4G/0G

2、sysstat工具簡介

sysstat是 Linux系統中的常用工具包,一般系統會自帶,如果沒有安裝,需要自行安裝該工具包,它可以用來監控網絡狀況、cpu、內存情況。這些包括SAR、SADF、MPSTAT、IOSTAT、TAPESTAT、PIDSTAT、CIFSIOSTAT和SA工具。

各工具的作用如下:

iostat - 提供CPU統計,存儲I/O統計(磁碟設備,分區及網絡文件系統);

mpstat - 提供單個或組合CPU相關統計;

pidstat - 提供Linux進程級別統計:I/O、CPU、內存等;

sar - 收集、報告、保存系統活動信息:CPU、內存、磁碟、中斷、網絡接口、TTY、內核表等;

sadc - 系統活動數據收集器,作為sar後端使用;

sa1 - 收集系統活動日常數據,並二進位格式存儲,它作為sadc的工具的前端,可以通過cron來調用;

sa2 - 生成系統每日活動報告,同樣可作為sadc的工具的前端,可以通過cron來調用;

sadf - 可以以CSV、XML格式等顯示sar收集的性能數據,這樣非常方便的將系統數據導入到資料庫中,或導入到Excel中來生成圖表;

nfsiostat-sysstat: 提供NFS I/O統計;

cifsiostat: 提供CIFS統計;

sar是 sysstat 中的核心工具。

為了實現 sar的累計統計,系統必須周期地記錄當時的信息,這是通過調用/usr/lib/sa/中的三個工具實現的:

·sa1:收集並存儲每天系統動態信息到一個二進位的文件中,用作 sadc的前端程序;

·sa2:收集每天的系統活躍信息寫入總結性的報告,用作 sar的前端程序;

·sadc:系統動態數據收集工具,收集的數據被寫入一個二進位的文件中,它被用作 sar工具的後端。

3、SAR命令介紹

在使用 Linux系統時,常常會遇到各種各樣的問題,比如系統容易死機或者運行速度突然變慢,這時我們常常猜測:是否硬碟空間不足,是否內存不足,是否 I/O出現瓶頸,還是系統的核心參數出了問題?這時,我們應該考慮使用 sar工具對系統做一個全面了解,分析系統的負載狀況。

sar(System ActivityReporter)是系統活動情況報告的縮寫。sar工具將對系統當前的狀態進行取樣,然後通過計算數據和比例來表達系統的當前運行狀態。它的特點是可以連續對系統取樣,獲得大量的取樣數據;取樣數據和分析的結果都可以存入文件,所需的負載很小。 sar是目前 Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁碟I/O、CPU效率、內存使用狀況、進程活動及IPC有關的活動等。為了提供不同的信息,sar提供了豐富的選項、因此使用較為複雜。

4、Sar工具監控

在日常使用中,通常SAR命令格式為:# sar –help

以下列表為常用的選項說明:

4.1 網絡服務

每1秒採樣一次,連續採樣2次,觀察網絡服務情況,命令如下:

sar -n DEV 1 2

我們通過MOBAXterm工具遠程伺服器,在壓測執行過程中,查看伺服器的cpu等性能信息。

IFACE:就是網絡設備的名稱;

rxpck/s:每秒鐘接收到的包數目;

txpck/s:每秒鐘發送出去的包數目;

rxbyt/s:每秒鐘接收到的字節數;

txbyt/s:每秒鐘發送出去的字節數;

rxcmp/s:每秒鐘接收到的壓縮包數目;

txcmp/s:每秒鐘發送出去的壓縮包數目;

txmcst/s:每秒鐘接收到的多播包的包數目。

rxbyt/s:1296.46 txbyt/s:1177.78

4.2 cpu監控

查看CPU信息(型號)

# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

cpu的個數為4。

(1)每1秒採樣一次,連續採樣1次,觀察CPU 的使用情況,命令如下:

sar -P ALL 1 1

#%user #用戶空間的CPU使用;

#%nice 改變過優先級的進程的CPU使用率;

#%system 內核空間的CPU使用率;

#%iowait CPU等待IO的百分比;

#%steal 虛擬機的虛擬機CPU使用的CPU;

#%idle 空閒的CPU;

#在以上的顯示當中,主要看%iowait和%idle,%iowait過高表示存在I/O瓶頸,即磁碟IO無法滿足業務需求,如果%idle過低表示CPU使用率比較嚴重,需要結合內存使用等情況判斷CPU是否瓶頸。

如圖展示,接口調用過程中,用戶佔用cpu8%,內核佔用1%,空閒90%, 磁碟未佔用。執行過程中,未出現cpu突增或突降的情況。表明該接口較穩定。

每10秒採樣一次,連續採樣3次,觀察CPU 的使用情況,並將採樣結果以二進位形式存入當前目錄下的文件test中,需鍵入如下命令:

sar -u -o test 10 3

%steal:管理程序(hypervisor)為另一個虛擬進程提供服務而等待虛擬 CPU 的百分比。

根據監控情況,如出現下列情況,需要考慮是否性能異常。

1. 若 %iowait 的值過高,表示硬碟存在I/O瓶頸;

2. 若 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量;

3. 若 %idle 的值持續低於1,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU ;

按照目前的場景,未出現異常,cpu運行穩定。

inode、文件和其他內核表監控,

每10秒採樣一次,連續採樣3次,觀察核心表的狀態,需鍵入如下命令:

sar -v 10 3

dentunusd:目錄高速緩存中未被使用的條目數量;

file-nr:文件句柄(file handle)的使用數量(在文件I/O中,要從一個文件讀取數據,應用程式首先要調用作業系統函數並傳送文件名,並選一個到該文件的路徑來打開文件。該函數取回一個順序號,即文件句柄(file handle),該文件句柄對於打開的文件是唯一的識別依據。要從文件中讀取一塊數據,應用程式需要調用函數ReadFile,並將文件句柄在內存中的地址和要拷貝的字節數傳送給作業系統。當完成任務後,再通過調用系統函數來關閉該文件。);

inode-nr:索引節點句柄(inode handle)的使用數量;

pty-nr:使用的pty數量(pty(虛擬終端):我們遠程telnet到主機或使用xterm時的個終端交互,這就是虛擬終端pty(pseudo-tty);

該指標便於後期問題定位和分析。

4.3 內存和交換空間監控(-r)

sar -r 5 5

每5秒採樣一次,連續採樣5次,監控內存分頁:

kbmemfree:這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間;.

kbmemused:這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間;

%memused:這個值是kbmemused和內存總量(不包括swap)的一個百分比.;

kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache;

kbcommit:保證當前系統所需要的內存,即為了確保不溢出而需要的內存(RAM+swap);

%commit:這個值是kbcommit與內存總量(包括swap)的一個百分比。

4.4 內存分頁監控

每1秒採樣一次,連續採樣10次,監控內存分頁:

sar -B 1 10

其中

pgpgin/s:表示每秒從磁碟或SWAP置換到內存的字節數(KB);

pgpgout/s:表示每秒從內存置換到磁碟或SWAP的字節數(KB);

fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major + minor);

majflt/s:每秒鐘產生的主缺頁數.;

pgfree/s:每秒被放入空閒隊列中的頁個數;

pgscank/s:每秒被kswapd掃描的頁個數;

pgscand/s:每秒直接被掃描的頁個數;

pgsteal/s:每秒鐘從cache中被清除來滿足內存需要的頁個數;

%vmeff:每秒清除的頁(pgsteal)佔總掃描頁(pgscank+pgscand)的百分比;

此信息反應內存分頁情況。情況展示信息正常,3秒間隔一次。

4.5 I/O和傳送速率監控(-b)

sar -b 1 10

每1秒採樣一次,連續採樣10次,報告緩衝區的使用情況:

tps:每秒鐘物理設備的 I/O 傳輸總量;

rtps:每秒鐘從物理設備讀入的數據總量;

wtps:每秒鐘向物理設備寫入的數據總量;

bread/s:每秒鐘從物理設備讀入的數據量,單位為 塊/s;

bwrtn/s:每秒鐘向物理設備寫入的數據量,單位為 塊/s;

場景展示為寫入操作,未進行讀入操作。平均2秒間隔一次。

4.6 進程隊列長度和平均負載狀態監控

sar -q 1 10

每1秒採樣一次,連續採樣10次,監控進程隊列長度和平均負載狀態

runq-sz:運行隊列的長度(等待運行的進程數);

plist-sz:進程列表中進程(processes)和線程(threads)的數量;

ldavg-1:最後1分鐘的系統平均負載(System load average);

ldavg-5:過去5分鐘的系統平均負載;

ldavg-15:過去15分鐘的系統平均負載;

指標平穩,無異常。

4.7 系統交換活動信息監控

sar -W 1 10

每1秒採樣一次,連續採樣10次,監控系統交換活動信息。

pswpin/s:每秒系統換入的交換頁面(swap page)數量;

pswpout/s:每秒系統換出的交換頁面(swap page)數量;

無狀態信息展示。

4.8 設備使用情況監控(-d)

# sar -d 5 2

每5秒採樣一次,連續採樣2次,報告設備使用情況:

tps:每秒從物理磁碟I/O的次數.多個邏輯請求會被合併為一個I/O磁碟請求,一次傳輸的大小是不確定的;

rd_sec/s:每秒讀扇區的次數;

wr_sec/s:每秒寫扇區的次數;

avgrq-sz:平均每次設備I/O操作的數據大小(扇區);

avgqu-sz:磁碟請求隊列的平均長度;

await:從請求磁碟操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒=1000毫秒);

svctm:系統處理每次請求的平均時間,不包括在請求隊列中消耗的時間;

%util:I/O請求佔CPU的百分比,比率越大,說明越飽和。

1. avgqu-sz 的值較低時,設備的利用率較高;

2. 當%util的值接近 1% 時,表示設備帶寬已經佔滿。

4.9 sar日誌保存(-o)

使用-o選項,我們可以把sar統計信息保存到一個指定的文件,對於保存的日誌,我們可以使用-f選項讀取:

linux:~ # sar -n DEV 1 10 -o sar.out

linux:~ # sar -d 1 10 -f sar.out

相比將結果重定向到一個文件,使用-o選項,可以保存更多的系統資源信息。

4.10 sar監控非實時數據

sar也可以監控非實時數據,通過cron周期的運行到指定目錄下。

例如:我們想查看本月27日,從0點到23點的內存資源。

sa27就是本月27日,指定具體的時間可以通過-s(start)和-e(end)來指定。

sar -f /var/log/sa/sa27 -s 00:00:00 -e 23:00:00 –r

要判斷系統瓶頸問題,有時需幾個 sar 命令選項結合起來。

懷疑CPU存在瓶頸,可用 sar -u 和 sar -q 等來查看;

懷疑內存存在瓶頸,可用 sar -B、sar -r 和 sar -W 等來查看;

懷疑I/O存在瓶頸,可用 sar -b、sar -u 和 sar -d 等來查看。

5、與zabbix監控工具對比圖表結果

5.1 zabbix工具介紹

5.1.1 Zabbix的部署架構

Zabbix分為三種部署架構,這三種架構為:

分布式部署架構

Server-Proxy,Server-Node兩種分布式部署架構,支持大規模的環境監控。

server-proxy-client架構

其中proxy是server、client之間溝通的一個橋梁,proxy本身沒有前端,而且其本身並不存放數據,只是將agentd發來的數據暫時存放,而後再提交給server 。該架構經常是和master-node-client架構做比較的架構 ,一般適用於跨機房、跨網絡的中型網絡架構的監控。

master-node-client架構

該架構是zabbix最複雜的監控架構,適用於跨網絡、跨機房、設備較多的大型環境 。每個node同時也是一個server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和資料庫,其要做的是將配置信息和監控數據向master同步,master的故障或損壞對node其下架構的完整性。

5.1.2 主動/被動模式監控

Zabbix通過線圖,餅圖,柱狀圖,區域圖等展現收集的數據, 根據用戶角色設置不同的訪問權限進行查看。

5.2 系統資源監控

sar監控

通過shell腳本查看cpu執行情況

代碼為:

存放於var/log/sa文件夾裡test.sh

執行:sh test.sh

內存使用量memery usage:32.0318

Cpu:8.27

磁碟tps:5.00

交換頁數swap pages number:0

執行sar -P ALL 1 3

%iowait未出現佔用過高,%idle未出現過低的情況,表明該接口調用佔用cpu為8%。

sar -n DEV 1 100(查看網絡服務,每秒一次,共100次)

Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: eth0 1256.40 1192.77 362.54 1833.41 0.00 0.00 0.00

rxpck/s:每秒鐘接收到的包數目 1256.40

txpck/s:每秒鐘發送出去的包數目 1192.77

rxbyt/s:每秒鐘接收到的字節數 (rxkB/s換成字節數)371240.96位元組

txbyt/s:每秒鐘發送出去的字節數(rxkB/s換成字節數)1877411.84位元組

sar -b 60 10

zabbix監控(每60秒採樣一次)

cpu百分比

內存使用率

系統負載

IO磁碟

網絡

分區空間百分比:

6、總結

在項目中大家可以根據實際情況靈活選擇監控工具進行監控,zabbix在總體監控上具有很好的實用性,其原理也是每60秒收集伺服器數據指標,而linux自帶的監控工具,針對伺服器的具體指標具有很好的定位作用。建議兩種工具在具體的性能監控過程中可以結合使用。

相關焦點

  • linux sar 命令詳解
    sar(System Activity Reporter系統活動情況報告)是目前 Linux 上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁碟I/O、CPU效率、內存使用狀況、進程活動及IPC有關的活動等。
  • 8款伺服器和應用性能監控工具
    這些方法都不是錯誤的,找到適合你需求的正確伺服器監控是網絡優化的重要組成部分。伺服器性能監控沒有「一刀切」的解決方案,以下我們將介紹從開源解決方案到企業級付費實施10大解決方案。每個都有自己的優點和缺點,目的幫助你找到適合網絡的正確工具。如何選擇伺服器監控工具?
  • 8款JVM性能調優監控工具(提高開發效率)
    不過對於很多人來說,往往找不到這些問題的根本所在,因此這篇文章主要是讓我們掌握一些工具來分析到底是哪裡出現了問題。在之前的文章中,主要是分析了JVM的內存結構、類加載機制和垃圾回收機制。文章的順序也是循序漸進的,從這篇文章當中我們主要是分析JDK自帶的工具,把理論應用於實踐。
  • 5 分鐘擼一個前端性能監控工具
    接下來,我們將使用瀏覽器提供的 window.performance 對象(Performance API 的具體實現),來實現一個簡易的前端性能監控工具。5 分鐘擼一個前端性能監控工具第一行代碼將工具命名為 pMonitor,含義是 performance monitor。
  • Sar2html首頁、文檔和下載 - Sar數據轉HTML - OSCHINA - 中文開源...
    Sar2html 可以將 sar程序執行的二進位結果數據轉成圖形的 HTML 格式,它提供了命令行工具、Web 接口和數據收集腳本。使用 sar2ascii 可從伺服器 (HP-UX 11.11, 11.23, and 11,31, Redhat 3, 4, and 5, Suse 8, 9, 10, and 11, and Solaris 5.9 and 5.10) 收集 sar 數據. For HP-UX servers, run "sh sar2ascii".
  • 9個最佳SSD狀態監控及性能優化工具
    如我們所知,與傳統硬碟驅動器(HDD)相比,固態硬碟具有極高的磁碟性能,尤其是新出廠的硬碟。但隨著時間的推移,SSD的性能會急劇下降。而且當存儲在其上的數據達到總容量的約70%時,尤其如此。SSD測試工具在監控固態硬碟的運行狀況和性能方面發揮著重要作用,使用這些工具可以幫助你做很多應對措施,來最大限度地減少性能下降。
  • 性能測試之用例得分評價和 CPU 內存數據監控——談談個人看法和實踐總結
  • 虛擬機性能監控、故障處理工具
    我們在學習工具之前應該意識到,工具都是知識技能的一層包裝,沒有什麼工具是萬能的,能夠「包治百病」。在JDK的bin目錄下提供了編譯、運行、打包、部署、籤名、調試、監控、運維等各種命令行工具,這些命令行工具體積都非常小,MAC版本的JDK11下可以看到大部分都在49K左右,並非JDK團隊刻意把他們製作的如此精煉、統一,而是因為這些命令行工具大多僅是一層薄包裝而已
  • 如何回答性能優化的問題,才能打動阿里面試官?
    準備階段:主要工作是是通過性能測試,了解應用的概況、瓶頸的大概方向,明確優化目標;分析階段:通過各種工具或手段,初步定位性能瓶頸點;測試階段:讓調優過的應用進行性能測試,與準備階段的各項指標進行對比,觀測其是否符合預期,如果瓶頸點沒有消除或者性能指標不符合預期,則重複步驟2和3。
  • DevOps團隊如何選擇監控工具
    網絡監控:這將查看計算機網絡進出的數據。你的監控工具可以捕獲有關組件(如交換機,防火牆,伺服器等)中的所有請求和響應。應用程式性能監控: APM解決方案收集有關服務運行情況的數據。通過這些工具,我們可以對應用程式性能問題進行檢測和診斷,以確保服務以預期的水平運行。第三方組件監控:這涉及監控體系結構中第三方組件的運行狀況和可用性。
  • 2020年值得關注的綜合性網絡監控工具
    網絡監控是企業最為重要的網絡管理方法之一,也是網絡工程師和網絡管理員持續關注和優化的操作。2019年,我們介紹了不少網絡監控、性能監控和應用性能監控的工具。此文將從選擇供應商的視角,梳理出一些綜合性的網絡監控工具,以便大家做篩選,以及後續功能、成本方面的深入選擇。
  • 國外十大流行的伺服器監控工具(圖)
    我們挑選出了一些應該被監控的參數,它們通常是引發伺服器宕機故障的「罪魁禍首」:  CPU利用率  伺服器內存佔用率  伺服器和它的各種組件的物理溫度  帶寬佔用率  磁碟空間佔用率  基於這些參數,我們精心挑選出了10個頂級的監控工具,這些工具可以讓你的伺服器一直處於完美狀態之中,它們可以讓你的伺服器更加安全,更加健康
  • 詳解十三款運維監控工具
    有效的運行監測體系,最終離不開相關技術平臺的支撐,而我們需要了解監測技術平臺詳解十三款運維監控工具一、開源工具介紹Zabbix官方網站:http://www.jiankongbao.com監控寶是雲智慧為用戶提供IT性能監控(IT Performance Monitoring)的SaaS產品,包含網站監控、伺服器監控、中間件監控、資料庫監控、應用監控、API監控和頁面性能監控等功能。
  • 7款優秀的Docker容器監控工具
    容器的監控對開發者而言,具有十分重要的作用,因為它可以監控正在運行的應用程式,並確保容器達到其預期目標。這有助於及早發現問題並快速解決問題。今天,小編就來給大家介紹7款優秀的Docker容器監控工具,一起來看看吧。
  • Java:故障排查、JVM性能監控工具單
    當給一個系統定位問題的時候,知識、經驗是關鍵基礎,數據是依據,工具是運用知識處理數據的手段。今天來複習一下Java常用的調試排錯工具單。
  • 騰訊前端團隊是如何做web性能監控的?
    本文就來整理下如何進行 web 性能監控?包括我們需要監控的指標、監控的分類、performance 分析以及如何監控。但是,如何進行 web 性能監控本身是一個很大的話題,文中只會側重一部分進行研究,某些內容不是很全面。前言:為什麼需要監控?
  • 如何整合IT基礎設施監控工具?
    如何整合IT基礎設施監控工具? 兼容性規劃和合理使用API可以簡化IT基礎設施監控和管理工具整合項目。如果方法得當,性能監控工具整合可以提高數據中心管理員的洞察力和生產力。
  • 系統架構性能優化思路
    除了伺服器的計算能力參數,另外一個重點就是我們說的存儲設備,影響到存儲的重點又是IO讀寫性能問題。有時候我們監控發現CPU和內存居高不下,而真正的瓶頸通過分析反而發現是由於IO瓶頸導致,由於讀寫性能跟不上,導致大量數據無法快速持久化並釋放內存資源。比如在Linux環境下,本身也提供了性能監控工具方便進行性能分析。
  • 乾貨推薦:Java 性能分析工具:Java Mission Control
  • 應用性能監控的10個小技巧
    下面給出10個應用性能監控小技巧,教你如何提升你的應用體驗。      技巧 1: 確定哪些應用需要優先監控      雲計算和移動辦公在提升企業效率的同時,也導致企業無法對員工設備進行有效監管,應用出現無序狀態。