1. 用戶態CPU是指執行應用程序代碼的時間佔總CPU時間的百分比。html
系統態CPU是指應用執行操做系統調用的時間佔總CPU時間的百分比。系統態CPU高意味着共享資源有競爭或者I/O設備之間有大量的交互。java
提升應用性能和擴展性的一個目標就是儘量下降系統態CPU使用率。linux
2. CPU運行隊列就是那些已經準備好運行、正等待可用CPU的輕量級進程。ios
當運行隊列長度達處處理器的4倍或者更多時,系統的相應就很是遲緩了。bash
解決運行隊列長有兩種辦法:網絡
1). 增長CPU以分擔負載;oracle
2). 分析系統中運行的應用,改進CPU使用率;分佈式
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空閒率
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應用正面臨鎖競爭;
free:可用空閒內存;
si:內存頁面換入;
so:內存頁面換出;
[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的性能。
須要編譯安裝(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:飽和度
[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 1 3 查看當前CPU數據,每一秒刷新一次,統計三次sar -q 查看平均負載sar -r 查看內存使用情況sar -W 查看頁面交換髮生情況sar –b 查看I/O和傳送速率的統計信息