Java性能優化權威指南-讀書筆記(一)-操做系統性能監控工具

一:CPU

1. 用戶態CPU是指執行應用程序代碼的時間佔總CPU時間的百分比。html

系統態CPU是指應用執行操做系統調用的時間佔總CPU時間的百分比。系統態CPU高意味着共享資源有競爭或者I/O設備之間有大量的交互。java

提升應用性能和擴展性的一個目標就是儘量下降系統態CPU使用率。linux

2. CPU運行隊列就是那些已經準備好運行、正等待可用CPU的輕量級進程。ios

當運行隊列長度達處處理器的4倍或者更多時,系統的相應就很是遲緩了。bash

解決運行隊列長有兩種辦法:網絡

1). 增長CPU以分擔負載;oracle

2). 分析系統中運行的應用,改進CPU使用率;分佈式

1. vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 104956    868 825812    0    0     1     5   16   25  0  0 100  0  0

r:CPU運行隊列長度,值是運行隊列中輕量級進程的實際數量性能

us:用戶態CPU使用率ui

sy:系統態CPU使用率

id:CPU空閒率

2. top

top - 09:42:04 up 3 days, 3 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 108 total,   3 running, 105 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1015472 total,   104568 free,    84224 used,   826680 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   727760 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                          
  784 root      20   0  553064  16340   5748 S  0.0  1.6   0:21.48 tuned                                                                                            
  743 root      20   0  110512  13140    676 S  0.0  1.3   0:00.13 dhclient                                                                                         
 9678 polkitd   20   0  527456  13128   4680 S  0.0  1.3   0:00.09 polkitd                                                                                          
    1 root      20   0   43684   6176   3804 S  0.0  0.6   0:05.08 systemd                                                                                          

上半部分是整個系統的統計信息,下半部分是進程的統計信息。

P 按CPU佔用率排序
M 按內存佔用率排序
T 按CPU佔用時間排序
H 查看詳細線程信息

二:內存

1. 系統在使用頁面交換或虛擬內存時,訪問swap中內存以及JVM垃圾回收swap中內存時,都存在內存置換(從swap中置換到內存),性能確定有問題;

2. 鎖競爭,通常來講讓步時鐘週期佔用3%—5%或更多,說明java應用正面臨鎖競爭;

vmstat

free:可用空閒內存;

si:內存頁面換入;

so:內存頁面換出;

pidstat

[test ~]$ pidstat -w -I -p 7938 5
Linux 3.10.0-229.20.1.el7.x86_64 (test) 	11/13/2016 	_x86_64_	(1 CPU)

07:56:42 PM   UID       PID      cswch/s     nvcswch/s  Command
07:56:47 PM     0      7938      3500.00     0.00  java
07:56:52 PM     0      7938      3500.00     0.00  java
07:56:57 PM     0      7938      3500.00     0.00  java

Average:        0      7938      3500.00     0.00  java

cswch/s:讓步式上下文切換;

例如:處理器爲3.0GHz雙核,每一個處理器上下文切換3500/2=1750,耗費的時鐘週期1750*80000=140000000,所以上下文切換所佔比例爲:140000000/3000000000=4.7

三:網絡

分佈式Java應用的性能和擴展性受限於網絡帶寬或網絡I/O的性能。

nicstat

須要編譯安裝(https://blogs.oracle.com/timc/tags/linux)

    Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
13:25:57     eth0    2.34    1.77    2.84    2.29   842.6   789.6  0.00   0.00
13:25:57       lo    0.00    0.00    0.00    0.00   85.49   85.49  0.00   0.00

Int:網絡接口設備名

rKb/s:每秒讀取的KB數

wKb/s:每秒寫入的KB數

%Util:網絡使用率

Sat:飽和度

四:磁盤

iostat

[test ~]$ iostat -xm
Linux 3.10.0-229.20.1.el7.x86_64 (test) 	11/13/2016 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.00    0.22    0.06    0.24   99.23

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvda              0.00     0.22    0.11    0.38     0.00     0.00    16.79     0.00    6.15    7.51    5.74   2.05   0.10
xvdb              0.00     0.00    0.00    0.00     0.00     0.00    18.07     0.00    7.04   10.93    6.36   2.75   0.00

五:統計

sar

sar 1 3 查看當前CPU數據,每一秒刷新一次,統計三次sar -q 查看平均負載sar -r 查看內存使用情況sar -W 查看頁面交換髮生情況sar –b 查看I/O和傳送速率的統計信息

相關文章
相關標籤/搜索