天天看點

面試為什麼需要了解JVM

說在前面

如果你經常注意面試題,你會發現現在面試題多多少少會含有jvm相關的面試題,那麼為什麼現在面試需要了解或者問面試題呢?

主題

談談自己的了解,概括為以下幾個方面:

的确很重要。

供大于求。

面試風氣。

下面就針對這幾點談談。

的确很重要

随着網際網路的發展,高并發高可用、快速響應成為軟體的必須,而JVM與這些有着密切關聯。之前JVM系列好多都是一些由于STW影響到快速響應問題,忽然網站慢一下(抖動下)等問題,下面談談最近通過JVM排查到的高并發高可用問題。(在高可用高并發下面問題原因可能會很多,比如cpu異常高、磁盤IO高、SWAP空間等,有可能很多問題都是綜合性的問題)

以前在我的認知裡面,如果服務運作有問題,最簡單有效快速地辦法就是重新開機,最近遇到了問題打破了我對該方法的認知。

某業務線最近叢集服務更新忽然上線上去不能提供服務,之後影響到整個叢集,檢視當時伺服器情況,負載、cpu、io、swap、磁盤等都正常,檢視日志就是卡在最後一行不動了(也沒有發現OOM,等任何異常)。

如果是之前估計這個問題我也就排查不了了,現在排查問題多了一個次元JVM(的确有時候需要考慮的,并且現在很多監控工具都會考慮到JVM的),檢視gcutil檢視比例,發現from 100% eden 100% old 100%但是服務就是沒有OOM,執行任何都指令都非常緩慢了(更别談通路請求了),檢視具體gc日志發現concurrent mode failure 并且時間很長,猜測就是一瞬間量把記憶體給用完了,導緻from 100% eden 100% old 100%現象,最終不能提供服務,之後其他叢集節點也陸續出現了此類情況,重新開機無效,現象一樣很快就from 100% eden 100% old 100% 不能提供服務,沒辦法,一直重新開機直到都啟動好了可以正常提供服務。

留了一台進行排查問題,執行jmap -histo pid無果,加-F也無果,後來執行jmap -dump:format=b,file=heap.bin pid (6G堆執行了3-4個小時左右)通過MAT分析檢視,發現都是某個邏輯産生的資料,占用了5G左右(char[]、String、Map、List等都與某個邏輯代碼有關)猜測是該問題(由于涉及到公司具體業務不友善截圖,隻能大概說明下),很容易定位到代碼最後是由于并發沒有考慮好,邏輯寫的也有點問題導緻的,進行修改處理,問題解決,出了JVM相關問題可以進行排查解決。

可能很多人認為線上出現問題可以排查繼續解決問題的人牛逼,其實錯了,真正牛逼的人都是在問題産生前就解決了(需要意識裡面轉變和學習思考提高的地方)。

下面看個例子就明白了,我覺得放在這裡特别合适:

春秋戰國時期,有位神醫被尊為“醫祖”,他就是“扁鵲”。一次,魏文王問扁鵲說:“你們家兄弟三人,都精于醫術,到底哪一位最好呢?”扁鵲答:“長兄最好,中兄次之,我最差。”文王又問:“那麼為什麼你最出名呢?”扁鵲答:“長兄治病,是治病于病情發作之前,由于一般人不知道他事先能鏟除病因,是以他的名氣無法傳出去;中兄治病,是治病于病情初起時,一般人以為他隻能治輕微的小病,是以他的名氣隻及本鄉裡;而我是治病于病情嚴重之時,一般人都看到我在經脈上穿針管放血,在皮膚上敷藥等大手術,是以以為我的醫術高明,名氣是以響遍全國。”

如果能在編碼時候就考慮到JVM,做到面向JVM程式設計那就更牛逼了,如果能在上線前查閱到此類JVM問題或者是OOM問題以及一些其他問題那也就好了。

綜述:是以這些成為必不可少的技能,是以面試需要了解,因為公司可能會面臨該問題。

供大于求

現在不像以前了,以前會點html都好找工作,現在由于學習軟體的人越來越多,而且每年大學生都在畢業(而老一輩的也很少換工作)人隻會越來越多,有個笑話,随便在大街上扔硬币砸到的那個可能就是搞軟體的,現在人員太多,公司為了區分,會多添加次元,每多一個次元可能就會刷掉一批人,核心供大于求,是以我們也必須朝着這些大的方向努力,使得自己的競争力比别人強。

面試風氣

簡單的問題都不好意思問,怕面試者鄙視面試公司問的問題。現在有一股妖風,不管啥公司都慢慢像阿裡這樣的公司靠近,面試不問點jvm、并發、分布式都不好意(雖然公司可能沒有用到,雖然可能僅僅CURD),老是覺得問問這些顯得逼格高點,不管處于什麼原因很多公司的确都在學習他們,都在問這些問題,那麼我們就朝着這些大的方向努力也是沒錯的,如果朝着這些方向努力就是他們需要的人才,那麼也就對了。

類似其他,比如高并發 鎖、分布式、緩存等都可以考慮考慮這樣思考,你會有不一樣的收獲的。

原文釋出時間為:2018-07-14

本文作者:零度

本文來自雲栖社群合作夥伴“

程式員小灰

”,了解相關資訊可以關注“