java性能調優-工具箱

來自:Java性能權威指南

操作系統的工具和分析-

性能分析的啓動是一組操作系統自帶的基本監控工具。
無論何時運行性能測試,都應該收集操作系統的數據,至少需要收集CPU、內存和磁盤使用率,使用網絡的話,還要收集網絡使用率。

cpu使用率

CPU使用率分爲兩類:用戶態時間和系統態時間。用戶態時間是CPU執行應用代碼所佔時間的百分比,而系統太時間則是CPU執行內核代碼所佔時間的百分比。
系統態時間與應用相關,比如應用執行I/O操作,系統就會執行內核代碼從磁盤讀取文件,或者將緩存數據發送到網絡,等等。任何使用底層系統資源的操作,都會導致應用佔用更多的系統態時間。

性能調優的目的是:在儘可能短的時間內讓CPU使用率儘可能的高。

檢查CPU使用率是弄清楚用應用性能的第一步,但它的用途不僅如此:它可以查看代碼的CPU使用是否與預期的一樣,或者可以指出一些同步或資源問題。

示例:命令:vmstat 1(每秒輸出一行)
在這裏插入圖片描述
每秒內,CPU被佔用450毫秒(1秒鐘42%的時間執行用戶代碼,3%的時間執行系統代碼)。相應的,CPU空閒550毫秒。CPU空閒有可能有一下原因。

  • 應用被同步原語阻塞,直至鎖釋放才能繼續執行。
  • 應用在等待某些東西,例如數據庫調用所返回的響應。
  • 應用的確是無所事事

CPU運行隊列

前面vmstat的輸出:Unix系統的運行隊列長度(vmstat輸出示例中的1或2)是所有正在運行或待運行(即一旦有可用CPU就可以運行)線程數。示例中至少有一個線程試圖運行:即以單線程執行應用。因此,運行隊列長度至少是1.記住,運行隊列反應的是機器上所有東西的運行情況,所以示例輸出中有時會看到運行隊列長度爲2,因爲此時有其他線程(來自其他完全隔離的進程)試圖運行

如果試圖運行的線程數超過了可用的CPU,性能就會下降.一般來說,Windows的處理器隊列長度最好爲0,Unix系統小於或等於CPU的數目。如果在相當長時間內運行隊列很長,說明系統已經過載,這時你應該檢查系統,減少機器正在處理的工作量(將工作轉移到其他機器或者優化代碼)

快速小結:1. 檢查應用性能時,首先應該審查CPU時間
2. 優化代碼的目的是提升而不是降低(更短時間段內的)CPU使用率
3. 在試圖攝入優化應用前,應該先弄清楚爲何CPU使用率低

磁盤使用率

監控磁盤使用率有兩個目的:**第一個目的:**與應用本身有關:如果應用正在做大量的磁盤I/O操作,那I/O就容易成爲瓶頸
rrqm/s: 每秒對該設備的讀請求被合併次數,文件系統會對讀取同塊(block)的請求進行合併
wrqm/s: 每秒對該設備的寫請求被合併次數
r/s: 每秒完成的讀次數
w/s: 每秒完成的寫次數
rkB/s: 每秒讀數據量(kB爲單位)
wkB/s: 每秒寫數據量(kB爲單位)
avgrq-sz:平均每次IO操作的數據量(扇區數爲單位)
avgqu-sz: 平均等待處理的IO請求隊列長度
await: 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒爲單位)
svctm: 平均每次IO請求的處理時間(毫秒爲單位)
%util: 採用週期內用於IO操作的時間比率,即IO隊列非空的時間比率
重點關注參數

1、iowait% 表示CPU等待IO時間佔整個CPU週期的百分比,如果iowait值超過50%,或者明顯大於%system、%user以及%idle,表示IO可能存在問題。

2、avgqu-sz 表示磁盤IO隊列長度,即IO等待個數。

3、await 表示每次IO請求等待時間,包括等待時間和處理時間

4、svctm 表示每次IO請求處理的時間

5、%util 表示磁盤忙碌情況,一般該值超過80%表示該磁盤可能處於繁忙狀態。
在這裏插入圖片描述
應用正在往sda寫數據。w_await——每次I/O寫的時間——相當滴,磁盤使用率只有1.04%。(5200RPM的磁盤可以很好的支持15毫秒)這裏有條線索可以看出點問題:系統在內核花費了37.89%的時間。一種可能是系統正在進行其他I/O(其他程序中)。如果這個系統時間都來自被測的應用,說明某些低效率的事正在發生。
另一條線索是,系統每秒寫爲24.2:當每秒寫入只有0.14MB時,這算很大的數字。這說明I/O已經是瓶頸,接下來應該檢查應用是如何寫的。

如果磁盤速度趕不上I/O請求,問題的另外一面就出現了:
在這裏插入圖片描述
Linux好處在於可以立即高速我們磁盤的使用率爲100%。它也能告訴我們進城的47.89%的事件在iowait(表示正在等待磁盤)。

第二目的即便預計應用不會有很高的I/O——有助於監控系統是否在進行內存交換。

快速小結:1. 對於所有應用來說,監控磁盤使用率非常重要。即便不直接寫磁盤的引用,系統交換仍然會影響他們的性能。
2. 寫入磁盤的應用遇到瓶頸,是因爲寫入數據的效率不高(吞吐量太低),或者是因爲寫入太多數據(吞吐量太高)。

網絡使用率

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 580
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章