課程簡介
在互聯(lián)網(wǎng)+的今天,人們在PC、手機(jī)、Pad 上安裝了各式各樣的軟件服務(wù)或APP,享受著互聯(lián)網(wǎng)技術(shù)帶來的高效和便捷。隨著這些產(chǎn)品的高速發(fā)展,大家對高性能、穩(wěn)定性、安全性、擴(kuò)展性等方面有了更高的要求,而誕生于20多年前的Java平臺,一直緊跟時代脈搏,兼收并蓄,持續(xù)優(yōu)化,在編程領(lǐng)域交出最滿意的答卷,最終成為現(xiàn)代互聯(lián)網(wǎng)服務(wù)端開發(fā)的王者。當(dāng)然,一種語言再強(qiáng)大,也不能在任何時候都能達(dá)到我們理想的狀態(tài)。在實(shí)際工作中,我們會遇到非常多的性能問題,有些問題是需要在開發(fā)設(shè)計(jì)前通過規(guī)范避免的,有些問題是需要根據(jù)線上生產(chǎn)環(huán)境“邊查邊看邊調(diào)整”的。很多工程師在遇到這些問題時,會根據(jù)一些淺顯的表現(xiàn)來做很“粗暴”的處理,比如:OOM了就升配內(nèi)存,CPU飆高就升核,超時異常過多就延長超時時間。。。誠然,在緊急情況下,有些處理能馬上解決問題,但畢竟不是長久之計(jì),甚至有時候會弄巧成拙。為了讓大家對性能調(diào)優(yōu)有更深的認(rèn)識,本次課程我們會從JVM基礎(chǔ)開始講起,比如JVM內(nèi)存模型、GC機(jī)制、堆內(nèi)存分析等,然后延展開來,通過線上常見問題來實(shí)戰(zhàn)化學(xué)習(xí)JVM的性能監(jiān)控及調(diào)優(yōu)策略。
目標(biāo)收益
1、 對Java體系下整體性能與調(diào)優(yōu)有全面的認(rèn)知
2、 熟練掌握J(rèn)VM內(nèi)存模型以及GC調(diào)優(yōu)全過程(命令行、JVisualVM、Arthas等工具?)
3、 熟練掌握服務(wù)器端調(diào)優(yōu)策略與最佳實(shí)踐(內(nèi)存/IO/CPU等)
4、 熟練掌握代碼級性能提升關(guān)注點(diǎn),以及性能基準(zhǔn)測試方法
培訓(xùn)對象
課程大綱
引子 | 介紹JVM內(nèi)存模型及GC問題、性能優(yōu)化、服務(wù)端的性能配置等 |
第一單元 JVM基礎(chǔ) |
1.JVM組成及運(yùn)行機(jī)制 2.Java內(nèi)存模型 2.1內(nèi)存結(jié)構(gòu) 2.2內(nèi)存與線程 3.JVM參數(shù)概要 3.1啟動參數(shù)格式 3.2啟動參數(shù)設(shè)置 3.3常見啟動參數(shù) 4.GC基礎(chǔ)分析 4.1GC信息查看 4.2GC問題排查 (案例1:快速查看線上的GC問題) 4.3常見GC算法淺析 |
第二單元 JVM內(nèi)存及調(diào)優(yōu) |
5.堆內(nèi)存分析 5.1堆內(nèi)存結(jié)構(gòu) 5.2堆內(nèi)存信息分析 5.3OOM問題及內(nèi)存dump文件 5.4GC日志文件深度分析 ( 案例2:一次線上GC導(dǎo)致的系統(tǒng)卡頓問題排查過程/OOM dump信息分析 ) 6.Java線程狀態(tài)分析 6.1RUNNABLE狀態(tài)及分析 6.2BLOCKED狀態(tài)及分析 6.3WAITING(wait/notify、join)及分析 6.4使用jstack進(jìn)行死鎖檢測 7.內(nèi)置可視化診斷工具JVisualVM 7.1功能概覽與基礎(chǔ)配置 7.2線程監(jiān)控與分析 7.3內(nèi)存監(jiān)控與分析 7.4CPU采樣分析 8.線上問題診斷工具Arthas? 8.1Arthas功能概覽 8.2使用Arthas查看系統(tǒng)全景運(yùn)行時狀態(tài) 8.3Arthas常見命令工具 8.4線程問題診斷 (案例3:快速找到最忙執(zhí)行線程/代碼) 8.5耗時問題診斷 (案例4:快速排查線上調(diào)用鏈耗時問題) 如何線上診斷代碼級故障 |
第三單元 服務(wù)器性能調(diào)優(yōu)實(shí)戰(zhàn) |
9.CPU與性能診斷 9.1平均負(fù)載與負(fù)載分析 9.2負(fù)載與CPU使用率 9.3CPU性能指標(biāo)與工具介紹 案例5:使用vmstat、pidstat等工具進(jìn)行系統(tǒng)高負(fù)載分析及上下文切換分析 10.內(nèi)存與性能診斷 10.1內(nèi)存基礎(chǔ)知識 10.22. 內(nèi)存常見指標(biāo)/virt/res/buff/cache/Swap 10.3內(nèi)存性能指標(biāo)與問題診斷一般流程 案例6:Java Native代碼導(dǎo)致的內(nèi)存泄漏問題排查 |
第四單元 編寫高性能代碼 |
11.高性能代碼技巧 11.1線程池選型與參數(shù)調(diào)優(yōu) 11.2ThreadLocal的資源釋放 12.基于JMH的性能測試 12.1JMH基本介紹 12.2JMH基本概念之Mode、Iteration、Warmup等 12.3使用JMH進(jìn)行代碼級性能基準(zhǔn)測試 |
引子 介紹JVM內(nèi)存模型及GC問題、性能優(yōu)化、服務(wù)端的性能配置等 |
第一單元 JVM基礎(chǔ) 1.JVM組成及運(yùn)行機(jī)制 2.Java內(nèi)存模型 2.1內(nèi)存結(jié)構(gòu) 2.2內(nèi)存與線程 3.JVM參數(shù)概要 3.1啟動參數(shù)格式 3.2啟動參數(shù)設(shè)置 3.3常見啟動參數(shù) 4.GC基礎(chǔ)分析 4.1GC信息查看 4.2GC問題排查 (案例1:快速查看線上的GC問題) 4.3常見GC算法淺析 |
第二單元 JVM內(nèi)存及調(diào)優(yōu) 5.堆內(nèi)存分析 5.1堆內(nèi)存結(jié)構(gòu) 5.2堆內(nèi)存信息分析 5.3OOM問題及內(nèi)存dump文件 5.4GC日志文件深度分析 ( 案例2:一次線上GC導(dǎo)致的系統(tǒng)卡頓問題排查過程/OOM dump信息分析 ) 6.Java線程狀態(tài)分析 6.1RUNNABLE狀態(tài)及分析 6.2BLOCKED狀態(tài)及分析 6.3WAITING(wait/notify、join)及分析 6.4使用jstack進(jìn)行死鎖檢測 7.內(nèi)置可視化診斷工具JVisualVM 7.1功能概覽與基礎(chǔ)配置 7.2線程監(jiān)控與分析 7.3內(nèi)存監(jiān)控與分析 7.4CPU采樣分析 8.線上問題診斷工具Arthas? 8.1Arthas功能概覽 8.2使用Arthas查看系統(tǒng)全景運(yùn)行時狀態(tài) 8.3Arthas常見命令工具 8.4線程問題診斷 (案例3:快速找到最忙執(zhí)行線程/代碼) 8.5耗時問題診斷 (案例4:快速排查線上調(diào)用鏈耗時問題) 如何線上診斷代碼級故障 |
第三單元 服務(wù)器性能調(diào)優(yōu)實(shí)戰(zhàn) 9.CPU與性能診斷 9.1平均負(fù)載與負(fù)載分析 9.2負(fù)載與CPU使用率 9.3CPU性能指標(biāo)與工具介紹 案例5:使用vmstat、pidstat等工具進(jìn)行系統(tǒng)高負(fù)載分析及上下文切換分析 10.內(nèi)存與性能診斷 10.1內(nèi)存基礎(chǔ)知識 10.22. 內(nèi)存常見指標(biāo)/virt/res/buff/cache/Swap 10.3內(nèi)存性能指標(biāo)與問題診斷一般流程 案例6:Java Native代碼導(dǎo)致的內(nèi)存泄漏問題排查 |
第四單元 編寫高性能代碼 11.高性能代碼技巧 11.1線程池選型與參數(shù)調(diào)優(yōu) 11.2ThreadLocal的資源釋放 12.基于JMH的性能測試 12.1JMH基本介紹 12.2JMH基本概念之Mode、Iteration、Warmup等 12.3使用JMH進(jìn)行代碼級性能基準(zhǔn)測試 |