CPU使用率能夠分爲用戶態CPU使用率和系統態CPU使用率。
用戶態CPU使用率:應用程序代碼所執行的時間佔CPU總執行時間的百分比。
系統態CPU使用率:應用程序調用操做系統代碼所執行的時間佔CPU總時間的百分比。若是較高,說明有共享資源的競爭或者大量IO交互操做。 減小系統態CPU使用率,將CPU更多的執行時間分配到應用程序自己,能夠提升應用性能。
PS:要提高性能,除了CPU使用率,還要監控單位時間內執行的指令數、每條執行所需的週期等,防止等待狀態也被當成了高效執行。java
使用任務管理器進行監控。
左上角是CPU使用率總和,右上角是每一個CPU的使用率,綠色表明每一個CPU使用率,紅色表明每一個CPU的系統態使用率,先後二者的差表明用戶態使用率。算法
CPU調度程序運行隊列就是那些已經準備好運行、正在等待可用CPU來執行他們的線程。
虛擬處理器個數= Runtime.getRuntime().availableProcessors()
當隊列長度達到虛擬處理器個數的3-4倍時,就須要注意或者進行優化了。
對於上述狀況有兩種解決措施:緩存
採用性能監視器來處理
用圖形中顯示的數值(0-100)除以比例10.0就是隊列的長度。性能優化
除了CPU,內存相關屬性也會影響性能。如頁面調度或頁面交換、加鎖、線程切換
頁面交換:當執行應用程序所須要的內存超過可用物理內存時,就會發生頁面交換。具體步驟爲將應用程序中最少運行的部分騰出來,置換到磁盤上。若是要訪問這部分程序,就須要再將它從磁盤置換到內存。這個步驟很是影響性能。網絡
命令typeperf –si 5 "\Memory\Available Mbytes" "\Memory\Pages/sec"(其中-si 5表示每隔5秒打印一次) 第一列爲時間戳,第二列爲可用內存,第三列爲每秒頁面調度
若是有頁面調度,那麼可能系統在進行頁面交換。若是有頁面調度,但內存充足而且系統沒有頁面交換的時候,說明有應用正在啓動。數據結構
### 總述 分佈式java應用的性能和擴展性受到網絡帶寬和網絡I/O性能的影響。若是發送到系統的網絡請求太多,系統會排隊處理,並致使阻塞,這樣會產生延遲。框架
在任務管理器中 socket
磁盤I/O性能提高的策略:分佈式
減小磁盤I/O的同時也就減小了應用和系統打交道的次數,也就減小了系統態CPU使用率,也就提高了性能。一般使用辦法就是利用緩存來處理IO,從而提高性能。性能