Java性能優化——操做系統性能監控

1.CPU使用率

總述

CPU使用率能夠分爲用戶態CPU使用率系統態CPU使用率
用戶態CPU使用率:應用程序代碼所執行的時間佔CPU總執行時間的百分比。
系統態CPU使用率:應用程序調用操做系統代碼所執行的時間佔CPU總時間的百分比。若是較高,說明有共享資源的競爭或者大量IO交互操做。 減小系統態CPU使用率,將CPU更多的執行時間分配到應用程序自己,能夠提升應用性能。
PS:要提高性能,除了CPU使用率,還要監控單位時間內執行的指令數、每條執行所需的週期等,防止等待狀態也被當成了高效執行。java

Windows監控CPU使用率

使用任務管理器進行監控。
任務管理器
左上角是CPU使用率總和,右上角是每一個CPU的使用率,綠色表明每一個CPU使用率,紅色表明每一個CPU的系統態使用率,先後二者的差表明用戶態使用率。算法

2.CPU調度程序運行隊列

總述

CPU調度程序運行隊列就是那些已經準備好運行、正在等待可用CPU來執行他們的線程。
虛擬處理器個數= Runtime.getRuntime().availableProcessors()
當隊列長度達到虛擬處理器個數的3-4倍時,就須要注意或者進行優化了。
對於上述狀況有兩種解決措施:緩存

  1. 增長CPU
  2. 對應用程序的算法進行優化來改進CPU使用率。如減小垃圾回收的頻率,或者換一個能完成任務可是所需CPU指令更少的算法。

Windows監控CPU調度程序隊列

採用性能監視器來處理
性能監視器
用圖形中顯示的數值(0-100)除以比例10.0就是隊列的長度。性能優化

3.內存使用率

總述

除了CPU,內存相關屬性也會影響性能。如頁面調度或頁面交換、加鎖、線程切換
頁面交換:當執行應用程序所須要的內存超過可用物理內存時,就會發生頁面交換。具體步驟爲將應用程序中最少運行的部分騰出來,置換到磁盤上。若是要訪問這部分程序,就須要再將它從磁盤置換到內存。這個步驟很是影響性能。網絡

Windows監控內存利用率

命令typeperf –si 5 "\Memory\Available Mbytes" "\Memory\Pages/sec"(其中-si 5表示每隔5秒打印一次) 監控內存 第一列爲時間戳,第二列爲可用內存,第三列爲每秒頁面調度
若是有頁面調度,那麼可能系統在進行頁面交換。若是有頁面調度,但內存充足而且系統沒有頁面交換的時候,說明有應用正在啓動。數據結構

4.網絡I/O使用率

### 總述 分佈式java應用的性能和擴展性受到網絡帶寬和網絡I/O性能的影響。若是發送到系統的網絡請求太多,系統會排隊處理,並致使阻塞,這樣會產生延遲。框架

Windows監控網絡I/O使用率

在任務管理器中 監控網絡socket

對網絡I/O性能改進的建議

  • 控制並減小請求響應
  • 使用NIO。使用非阻塞socket,減小請求、響應的線程,每次讀取請求信息的時候都儘可能多的讀,每次寫響應信息的時候都儘可能多的寫,充分利用網絡I/O。
  • 使用NIO的時候不推薦使用jdk的原生nio,難寫,容易出錯,推薦使用成熟的nio框架。

5.磁盤I/O使用率

總述

磁盤I/O性能提高的策略:分佈式

  1. 更快的存儲設備
  2. 文件系統擴展到多個磁盤
  3. 操做系統調優,使得能夠緩存大量的文件系統數據結構

減小磁盤I/O的同時也就減小了應用和系統打交道的次數,也就減小了系統態CPU使用率,也就提高了性能。一般使用辦法就是利用緩存來處理IO,從而提高性能。性能

參考文獻

Java性能優化權威指南

相關文章
相關標籤/搜索