1. 程式人生 > >效能優化思路與具體問題分析過程

效能優化思路與具體問題分析過程

      效能優化方法論:1.計算機領域主要涉及到通訊、計算和儲存三項指標,從硬體的角度對應網絡卡、CPU和記憶體、磁碟,對應的衡量指標網路IO、CPU赫茲、儲存IO;2.效能優化定位瓶頸,網路IO優化:1)網絡卡可以購買萬兆網絡卡;2)採用高效的資料序列化和反序列機制;3)可以減少網路傳輸的資料量,借鑑大資料資料動程式碼動的分散式計算思路,即能本地化計算就本地化計算,否則,就想辦法減少網路傳輸的資料量,例如,Hadoop中的mapJoin以及combiner技術、Spark中的廣播變數等特性;3.壓縮技術能夠減少網路傳輸的資料量,也能減少資料儲存,但是增加CPU的計算量,對於hadoop分散式叢集來說,主要是IO密集型,推薦採用壓縮技術;

       分散式主要解決兩個問題:路由+備份;MySQL資料庫叢集:採用主從架構,master上面的binlog會同步到slave節點上面apply;redis叢集的主備與之類似;

       計算機技術歸根結底都是在解決一個key value對應關係;分而治之思想無處不在,MR思想等,其實生活中分治思想無處不在。

        GC和鎖是Java兩大死穴,GC可以採用對外記憶體方式解決;鎖,可以採用資料多版本思想,例如Oracle資料庫中的資料多版本。

問題分析過程:


多次執行jstack看看最後部分,鎖著的程式碼


jstat -gcutil 28232  2000


這三列重點監控,一個是年老代的暫用百分百,還有Full GC的次數和耗時


在程序中加入引數,記錄gc歷史

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log

上圖中->之前表示回收之前大小,之後表示回收之後大小。

一份已經存在的程式碼,執行時佔用記憶體偏高,或者丟擲OutOfMemoryError(OOME)
用jmap得到程序的執行時記憶體映象 jmap -dump:live,format=b,file=jmap.dat ${PID},其中-dump:live表示堆中活動物件,這個限定要分析物件範圍。

用jhat進行記憶體分析 jhat -J-Xmx4g jmap.dat,會啟動後會建立一個http server,埠為7000,之後通過瀏覽器檢視統計資料並分析問題,一般是第一個連結進去就能查詢到比較多的物件。


上圖由下圖中的連結地址跳轉過來


當top命令看到系統的sys時間較高,想了解程式碼的實際執行內容:檢視用什麼引數打開了什麼檔案、讀取寫入的內容、socket引數等等

可以用strace分析工具跟蹤程序及其子程序的系統呼叫,即# strace -fF -p ${PID} -o strace.log,跟蹤新啟動程序# strace -fF -o strace.log 要執行的命令。

網絡卡監控netstat -ant著重參考下標註


其他常用命令:iostat  nload  tcpdump

tcpdump -nn -i eth0 -xX -s 0 tcp and port 2181
-nn 制定抓包時不需要反解各個IP的域名
• -i 指明要偵聽的網路介面,需要注意的是如果是本機連本機的話,即便是用的不是”127.0.0.1”,也是走的lo介面
• -xX 說明需要顯示包的內容,預設是不顯示的
• -s 0 指定每個包內取多少位元組,0表示無上限,預設是128位元組