性能監控實戰


 

用戶響應時間=服務器響應時間+網絡時間

系統性能分析思路

(1)整體系統CPU利用率

(2)內存利用率

(3)磁盤I/O的利用率和延遲

(4)網絡利用率

 cpu

CPU:top、vmstat、uptime、sar

  一般我們期望會期望系統平均可用的CPU不少於20%

JVM自帶監控命令:jstat、jmap、Jvisualvm、JConsole

Mysql監控工具:Spolight、Monyog、及命令行工具

內存

 

     total      used        free         buffers         cached 

Mem  物理內存總量  使用的物理內存總量  空閑的物理內存總量  用作內核緩存的內存量  緩存的交換區總量

swap  交換區總量   使用的交換區總量     空閑交換區總量

 

可用物理內存=Mem(free+buffers+cached)

當物理內存不夠時,會使用swap分區,所以性能測試過程中需要關注swap和mem的使用情況。物理內存不夠,大量的內存置換到swap空間,可能導致CPU和I/O的瓶頸。

I/O

I/O比較頻繁(讀或者寫)的時候,如果I/O得不到滿足會導致應用的阻塞。

需要考慮I/O的TPS、平均I/O數據、平均隊列長度、平均服務時間、平均等待時間、IO利用率(磁盤Busy Time%)等指標

總結

很多時候,這些因素彼此之間是相互依賴的,任何一個處於高負載狀態,都可能導致其他資源受到影響,如:

(1)大量的網絡吞吐量導致占用CPU的資源增大,此時系統要分出部分資源進行軟件終端的處理

(2)大量的CPU開銷會嘗試更多的內存使用

 

理解並分析當前系統的特點很重要,多數系統對應的應用類型分為以下兩種:

(1)IO范疇

  大量數據處理的過程,不對CPU及網絡發起更多請求。如數據庫軟件(mysql、Oracle)

(2)CPU范疇

  批量處理CPU請求及數學計算的過程。如:webserver、mailserver等。

 瓶頸分析

CPU定位分析

CPU利用率大於50%是,需要注意了;大於70%,需要密切關注;高於90%,情況比較嚴重了。

監控命令:vmstat、sar、dstat、mpstat、top、ps

類型 度量方法 衡量標准
使用情況

1、vmstat 統計1-%id的計數

2、sar -u 統計1-%idle的計數

3、dstat 統計1-%idl的計數

4、mpstat -P ALL 統計%idle的計數

5、ps 統計CPU的計數

注意>=50%

告警>=70%

嚴重>=90%

滿載

6、vmstat的r計數器> cpu邏輯顆數

7、sar -q ,“runq-sz”>cpu邏輯顆數

8、dstat -q ,“run”>cpu邏輯顆數

運行隊列大於1時,證明已經有一定的負載了,不過這個計數也不絕對,需要進一步分期其他的資源情況來斷定是否CPU已經滿負荷運作
錯誤 9、perf工具捕獲處理器的錯誤信息,需處理器支持

安裝perf:yum install perf*

需處理器支持

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

內存定位分析

監控命令:vmstat、sar、dstat、free、top、ps等

類型

度量方法

衡量標注

使用情況

1、free 查看使用情況

2、vmstat

3、sar -r

4、ps

注意>=50%

告警>=70%

嚴重>=80%

滿載

5、vmstat的si/so比例輔助swapd和free利用

6、sar -W 查看次缺頁數

7、查看內核日志有誤OOM機制kill進程

8、dmesg | grep killed

1、so數值大,且swapd已經占比很高,內存肯定已經飽和

2、sar命令次缺頁多意味已經在不定地和swap打交道,證明內存已經飽和

3、但內存不夠用會出發內核的OOM機制

錯誤

9、查看內核有無physical failures

10、通過工具如valgrind等進行檢查

有計數

 

 

 

 

 

 

 

 

 

 

 

 

 

 

網絡定位分析

監控命令:sar、ifconfig、netstat,以及查看net的dev速率,通過查看發現收發包的吞吐率達到網卡的最大上限,網絡數據報文有因為這類原因而引起的丟包、阻塞等現象都證明當前網絡可能存在瓶頸。在進行性能測試是為了減小網絡的影響,一般我們都在局域網中進行測試執行。

類型 度量方法 衡量標准
使用情況

1、sar -n DEV 的收發計數大於網卡上限

2、ifconfig RX/TX寬帶超過網卡上限

3、cat /proc/net/dev的速率超過上限

4、nicstat的util基本滿負荷

1、收發包的吞吐速率達到網卡上限

2、有延遲

3、有丟包

4、有阻塞

滿載

5、ifconfig dropped 有計數

6、netstat -s "segments retransmited"有計數

7、sar -n EDEV,rxdrop/s  txdrop/s有計數

統計的丟包有計數證明已經滿了
錯誤

8、ifconfig,“errors”

9、netstat -i,RX-ERR TX-ERR

10 sar -n EDEV,rxerr/s   txerr/s 

11、ip -s link, “errors”

錯誤有計數

 

 

 

 

 

 

 

 

 

 

 

  

 

 

IO定位分析

監控命令:sar、iostat、iotop

類型 度量方法 衡量標准
使用情況

1、iostat -xz,“%util”

2、sar -d,“%util”

3、iotop的利用率很高

4、cat /proc/pid/sched | grep iowait

注意>=40%

告警>=60%

嚴重>=80%

滿載

5、iostat -xnz,“avgqu-sz ”>1

6、iostat await>70

IO已經有滿載嫌疑
錯誤

7、dmseg 查看io錯誤

8、smartctl /dev/sda

有信息

 

 

 

 

 

 

 

 

 

 

 

 

linux系統性能分析思路和實踐

系統負載監控分析實踐

可以通過uptime、top、w等命令分析

uptime

系統時間  up:主機運行時間  當前登錄用戶數  平均負載:過去1分鍾、5分鍾、15分鍾

(1)運行時間越長,系統越穩定

(2)當前用戶數,用w命令可以更詳細

  

(3)系統的平均負載只在特定時間間隔內運行隊列中的平均進程數。

  一般建議每個CPU內核平均負載不大於0.8;若大於1~3之間,如果系統其他資源都很正常,可接受;若>5,則系統性能有問題

   uptime是從文件/proc/loadavg文件里面讀取的。統計過去1分鍾、5分鍾、15分鍾平均負載:  

    [dcai@localhost ~]$ uptime | awk '{print $(NF-2)}'
    0.00,
    [dcai@localhost ~]$ uptime | awk '{print $(NF-1)}'
    0.02,
    [dcai@localhost ~]$ uptime | awk '{print $NF}'
    0.12

系統監控分析實戰

top之外,還有htop、dstat、nmon、glances等

top

1、第一行:uptime一樣

2、第二行:運行狀態信息

  運行、睡眠、中斷、僵死

3、第三行:CPU信息

  us:用戶占用CPU百分比

  sy:系統占用CPU百分比

  ni:優先級(用戶進程空間內改變過優先級的進程占用CPU百分比),范圍-20(最低優先級)~19(最高優先級)

  id:空閑CPU百分比

  wa:等待輸入輸出的CPU時間百分比

  hi:硬中斷占用的CPU百分比

  si:軟中斷占用的百分比

  我們比較關注:us、sy、id、wa、hi、si這六個數值

  (1)按下鍵盤1,可以顯示每個邏輯CPU的使用情況

  (2)id持續過低時,系統迫切需要解決CPU資源問題

  (3)wa使用率過高,需要考慮IO性能是否有瓶頸,可以用iostat,sar等命令進一步分析

  (3)hi使用率過高,可以分析文件 /proc/interrupts、/proc/irq/pid/smp_affinity、服務irqbalance是否配置、以及CPU的頻率設置,通過這些可以幫系統大賽優化系統的硬中斷

  (4)si:內核通過一種軟件的方法(可延遲函數)來模擬硬件的中斷模式,通常叫軟中斷。常見的軟中斷都和網絡有關,長時間的寫日志也可能產生軟中斷。   

      系統有個進程ksoftirqd來處理軟中斷,每個CPU都有自己對應的ksoftirqd/n(n為CPU邏輯ID)。但網絡出現阻塞的時候,ksoftirqd會出現瓶頸,此時可通過ps命令查看ps aux | grep ksoftirqd

      

  (5)CPU利用率=1-%id

4、第四行+第五行:內存使用情況

  buffer和cache的作用是縮短IO系統調用的時間。如果頻繁地訪問文件都能被命中,很明顯會比讀取磁盤調用快,磁盤的IO必定會減小。cache的命中率很關鍵,如果不能命中,對cache而言是極大的浪費,此時應考慮drop cache並提升相應的cache命中率。

5、第六行:進程信息

  進程號(PID)、進程所有者(USER)、進程優先級(nice值、NI)、進程使用的虛擬內存(VIRT)、進程使用的實際物理內存(RES)、共享內存(SHR)、CPU占用百分比、進程使用的物理內存百分比(%MEM)、進程使用的CPU時間總計(1/100秒,TIME+)、命令行

  (1)top顯示的是進程信息,要看線程級,可用ps -ef

  (2)TIME+表示的是進程使用的CPU時間總計,不是進程的存活時間

  (3)默認不會顯示進程分布在那顆CPU上,如想分析CPU對應的應用程序,可修改top默認配置,添加字段Last used CPU即可。

  (4)H:top配置幫助頁

      d:刷新間隔

     f:添加進程字段顯示列

     1:顯示平均/各顆CPU的利用率信息

     W:保存配置信息

6、top參數

  -d  批處理模式

  -c  命令/程序名  觸發

  -d  設置延遲間隔(刷新頻率)

  -n  設置迭代數量(退出前監控次數)

  -p  監控特定的PID

  -u或-U: 用戶名 或 UID

 

  top -b -d 1 -n 3 > top.log

 tomcat監控之probe

目前流行的中間件有tomcat、jetty、Jboss、weblogic、WebSphere等,基本原理相似,都遵循servlet規范。對容器的監控實際上是對JVM的監控,容器運行在JVM紙上。JVM的監控分析工具有jvisualVM、jconsole、jprofiler、zabbix、nagios、cacti等。下面介紹tomcat監控工具probe,probe只需要一個war包就可以完成監控任務,完全不用設置,下面是tomcat常規監控項:

類別 計數器 描述
tomcat JVM內存 關注GC回收頻率,Full GC次數越少越好
最大線程數 線程池連接數長期大於80%以上,建議優化
數據庫連接數 活動連接數長期大於80%以上,建議優化連接池

請求數

請求狀態

線程數,線程狀態,大量blocked狀態線程可以dump線程棧信息進行優化

 

 

 

 

 

 

 

probe

安裝probe之后,打開瀏覽器訪問probe:127.0.0.1:8089/probe

線程池的監控:

  current_threads_count:線程池中ready好的數量,我的在運行狀態,我的在等待狀態

  current_threads_busy:當前活動狀態的線程數量,正處在活動狀態

  max_threads:最大線程池數量

  我們需要關注current_threads_count和current_threads_busy是否接近max_threads,如果是,則需要加大max_threads數量;如果服務器硬件支撐不了更多線程數,就需要更換更強的硬件或做集群來分擔負載。

JVM監控

除了probe之外,自帶監控工具也比較好用

jps

  jps是jdk提供的一個查看當前java進程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的縮寫。非常簡單實用。

jps –l:輸出主類或者jar的完全路徑名

jps –v :輸出jvm參數

jps –q :僅僅顯示java進程號

jps -m : 輸出main method的參數 

jps -mlv 10.134.68.173 (如果需要查看其他機器上的jvm進程,需要在待查看機器上啟動jstatd。)

jstat

FGC(Full gc)會暫停用戶相應,也就是不處理用戶請求,等待Full gc完成后響應用戶請求,這個等待時間過大會影響用戶體驗,所以Full gc是JVM調優的重點

jstat -gcutil [PID]

jmap

分析程序內存占用其實是分析堆(Heap)內存,堆快照使用jamp獲取

典型獲取方式:

jmao dump:format=b,file=d:\heap.hprof [pid]

heap.hprof是快照文件,可以使用JVisualvm來打開

JVisualvm

JDK自帶的JVM可視化監控工具

在%JAVA_HOME%\bin下找到,雙擊啟動

下圖:可以做堆Dump操作,查看堆內存明細。堆的回收曲線能夠直觀反映堆內存回收頻率,是否有內存溢出等問題。

下圖:點擊“線程Dump”導出JVM當前線程棧信息,通過分析這些信息來定位到程序問題

總結:對於Java的應用來講,JVM的性能反映了Java程序的性能,JVM的監控分兩大類,一是堆內存,二是線程;從堆內存可以分析大對象與內存溢出等問題,從線程狀態及線程信息分析出低效程序,解決的是CPU資源占用的問題。

 

MySql監控之MONyog

MySql監控方法:官方客戶端、命令行、SQL、MONyog

1、下載MONyog.地址:https://www.webyog.com/

2、安裝完成后,啟動MONyog進行連接配置

3、MONyog絕大多數指標都進行了詳細說明

 最后

 當性能測試環境復雜的情況下,可以借助zabbix、nagios、cacti等監控平台

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM