裝載:http://blog.chinaunix.net/uid-9789791-id-1997452.html
1.分佈式JAVA應用
基於TCP/IP+BIO,TCP/IP+NIO,UDP/IP +BIO,UDP/IP+NIO 實現消息方式的系統間的通信方式基於MINA,JETTY框架
基於遠程調用 RMI(spring rmi),WebService(CXF)
2.大型分佈式java應用與SOA
基於SCA實現SOA平臺
基於ESB實現SOA平臺
ESB核心思想是基於消息中間件來實現系統間的交互
基於Tuscany實現SOA平臺--SCA
基於Mule實現SOA平臺 --ESB
3.深入理解JVM
Java源碼編譯步驟 1.分析和輸入到符號表 2.註解處理 3.語義分析和生成class文件
類加載機制 1.裝載(二進制字節碼加載至JVM) 2.鏈接(負責對二進制字節碼的格式進行校驗,初始化裝載類中靜態變量及解析類中調用的接口,類)
3.初始化(執行類中的靜態初始化代碼,構造器代碼及靜態屬性的初始化)
JDK基於棧的體系結構來執行字節碼,基於棧方式是好處爲代碼緊湊,體積小.
編譯時提供兩種模式:client compiler 和 server compiler
client compiler 是輕量級,只做少量性能開銷比高的優化,它佔用內存較少,適用於桌面交互式應用。優化主要有:方法內聯,去虛擬化,冗餘削除。
server compiler 是重量級,採用了大量的傳統編譯優化技巧來進行優化,佔用內存相對會多一些,適用於服務器的應用。
堆用於存儲對象及數組值。
-XMS -XMX 設置一樣的大小,防止內存大於變化。
jstat -gcutil [pid] 1000 10 minor GC時的變化情況
jconsole 可以圖形查看JVM內存變化狀況
JVisualVM 它類似於JPofiler 工具,基於此工具可查看內存的消耗情況,線程的執行狀況及程序中消耗CPU,內存的動作。
JMap 分析JVM內存狀況的工具 jmap -heap [pid] --查看JVM堆的配置信息
jmap -histo [pid] 查看JVM堆中對象詳細佔用情況
jHat 是java自帶的一個用於分析jvm堆dump文件工具 jhat -J-Xmx1024 [file]
jStat JAVA自帶的一個統計分析JVM運行狀況的工具
Eclipse Memory Analyzer 分析jvm 堆dump文件的插件
TDA是開源界一個不錯的用於分析線程堆棧信息的圖形化工具
5。性能調優
調用步驟:衡量系統現狀 設定調優目標 尋找性能瓶頸 性能調優 衡量是否達到目標 性能調優
通常性能瓶頸在表象是資源消耗過多,外部處理系統性能不足,或得資源消耗不多
資源主要消耗在CPU,文件IO,網絡IO以級內存方法,機器的資源是有限的。當某些資源消耗過多時,通常會造成系統的響應速度慢。
分析CPU 上下文切換, 運行隊列 ,利用率
top 或 pidstat 方式來查看進程中線程的CPU的消耗狀況
us 過高時,表示運行的應用消耗了大部分的CPU,sy值高時,表示Linux 花費了更多時間在進行線程的切換。
pidstat -d -t -p [pid] 1 100 查看線程IO消耗情況
iostat查看各個設備的IO歷史狀況
Linux 中可採用sar 來分析網絡IO 的消耗狀況
vmstat 查看內存信息
JVM調優
1.避免新生代大小設置過小 -當新生代大小設置過小時,會產生兩種比較明顯的現象,一是minor GC次數更加頻繁,二是有可能導致minor gc對象直接進入舊生代。
2.避免新生代設置過大
3.避免Survivor區過小或過大
4.合理設置新生代存活週期
程序調優
1.us過高 增加 Thread.sleep
2.sy 過高 基於kilim 採用Coroution方式支撐高併發
最耗CPU的線程26697爲例,將26697換算成十六進制的值,結合java thread dump (jstack [pid] | grmp 'nid = 0x6849') 找到些線程
文件IO消耗嚴重解決方法1.異步寫文件 log4j AsyncAppender
2.批量寫文件
3.限流
4.限文件大小
網絡IO消耗嚴重的解決方法
1.釋放不必要的引用
2.使用對象緩存池
3.採用合理的緩存失效算法
4.合理使用SoftReference 和 WearReference
銷競爭激烈
1.使用併發包中的類
2.使用Treiber 算法
3.使用michael-scott非阻塞隊列算法
4.儘可能少用鎖
5.拆分鎖
6.去除讀寫操作的互斥鎖
6。構建高可用的系統
負載均均衡技術
選擇實際業務處理機器方式 1.隨機選擇 2.Hash選擇 3.(Round-Robin)選擇 4.按權重選擇 5.按負載選擇 6.按連接選擇
響應返回方式 1.響應通過負載均衡機器返回(NAT) 2.響應直接返回請求發起方(IP Tunneling 或 DR)
硬件負載設備 F5 各 Netscalar
軟件負載 LVS
去中心實現負載均衡 Gossip(Cassandra 採用)
基於Paxos保存一致性
Fackbook Scribe 日誌分析系統
書推薦 web容量規劃的藝術
7.構建可伸縮的系統
分佈式文件系統 HDFS GFSDAL(數據庫訪問層)--- amoeba
支撐大數據量 讀寫分離 多master