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自帶的監控工具,針對伺服器的具體指標具有很好的定位作用。建議兩種工具在具體的性能監控過程中可以結合使用。