談談JVM調優

 因爲自己的簡歷上寫着熟悉JVM,於是每次都成了必問,並且問不像之前一樣問內存模型了。一般都是會問,JDK8 默認的垃圾回收器是什麼? 你都知道哪些垃圾回收器。有沒有線上調優經驗?線上出現了什麼情況,你們進行調優?

  這篇文章我不介紹內存模型,以及JVM 基礎的知識點了。就垃圾回收器,和線上JVM調優兩個問題展開。

 

# # 第一個問題,jdk 8 默認的垃圾回收器

 先看一下都有哪些垃圾回收器

 

 

jdk8環境下,默認使用 Parallel Scavenge(新生代)+ Serial Old(老年代)

  再來分析一下爲什麼問這個問題,如果你熟悉JVM,那連默認的 垃圾回收器,以及一些默認的配置參數都不知道,那你肯定就沒調優過。如果這個問題被問住了,那麼你簡歷上的熟悉JVM這個本來的加分項,就會成爲減分項。

  以及這個問題可以引申出來的幾個問題:首先你要知道默認的垃圾回收器,如果你知道,能答出來,肯定就要區分這些垃圾回收器了。第二個問題的話是垃圾回收算法,這個問題也是垃圾回收器區分出來的。不同的垃圾回收器使用的不同的垃圾回收算法,不同的垃圾回收算法又使用與不同的場景。

  比方說年輕代,每次GC 要清理很多內容,只保留一小部分,那麼使用複製算法是最合適的。根據上邊說的 jdk8 使用Parallel Scavenge ,這個垃圾回收器就是使用的複製算法。並且對於一些年輕帶頻繁GC的場景比如是秒殺系統裏邊的訂單系統,Parallel Scavenge 這個垃圾回收器是多線程的。

 

# # 線上調優

 爲什麼調優?

  首先有一個大前提,調優是爲了提高穩定性,穩定性放在首位,其次纔是爲了提升性能。

  這個線上調優,一般不是沒事幹了,看看線上的情況。一般來講,就是有一些症狀,纔去進行的(當然了,上線前肯定也要壓力測試,將能發現能解決的問題給解決了。) 就像生病了纔去醫院看一樣。而感冒發燒則是症狀。

  需要進行JVM調優的症狀有以下這些:比如 運維人員看到了cpu 飆升,比如系統 每隔一段時間就會變慢,過幾分鐘就好了。  

再嚴重一點,服務器過一段時間就會宕機。而且很有週期性。

  調優一般要解決什麼問題?

  發現內存泄露,內存泄露會引發頻繁的GC,內存泄露就是這塊內存永遠的被佔用着。GC 到了一定條件就會觸發。對於排查細節,則在下邊 模擬問題產生,排查解決問題裏邊有一篇文章。

 怎麼調優:看一個真實的線上調優的案例

 

# #  模擬問題產生,排查解決問題

 點擊這篇文章

 這篇文章裏邊會介紹一些常用的問題定位的工具。

 

# # JVM 調優規劃

https://www.520mwx.com/view/39060

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章