匠心零度 轉載請注明原創出處,謝謝!
說在前面
如果你經常注意面試題,你會發現現在面試題多多少少會含有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相關問題可以進行排查解決。
很能很多人認為線上出現問題可以排查繼續解決問題的人牛逼,其實錯了,真正牛逼的人都是在問題產生前就解決了(需要意識里面轉變和學習思考提高的地方)。
下面看個例子就明白了,是Charles告訴我的,我覺得放在這里特別合適:
春秋戰國時期,有位神醫被尊為“醫祖”,他就是“扁鵲”。一次,魏文王問扁鵲說:“你們家兄弟三人,都精於醫術,到底哪一位最好呢?”扁鵲答:“長兄最好,中兄次之,我最差。”文王又問:“那么為什么你最出名呢?”扁鵲答:“長兄治病,是治病於病情發作之前,由於一般人不知道他事先能鏟除病因,所以他的名氣無法傳出去;中兄治病,是治病於病情初起時,一般人以為他只能治輕微的小病,所以他的名氣只及本鄉里;而我是治病於病情嚴重之時,一般人都看到我在經脈上穿針管放血,在皮膚上敷葯等大手術,所以以為我的醫術高明,名氣因此響遍全國。”
如果能在編碼時候就考慮到JVM,做到面向JVM編程那就更牛逼了,如果能在上線前查閱到此類JVM問題或者是OOM問題以及一些其他問題那也就好了。
綜述:因此這些成為必不可少的技能,所以面試需要了解,因為公司可能會面臨該問題。
供大於求
現在不像以前了,以前會點html都好找工作,現在由於學習軟件的人越來越多,而且每年大學生都在畢業(而老一輩的也很少換工作)人只會越來越多,有個笑話,隨便在大街上扔硬幣砸到的那個可能就是搞軟件的,現在人員太多,公司為了區分,會多添加維度,每多一個維度可能就會刷掉一批人,核心供大於求,所以我們也必須朝着這些大的方向努力,使得自己的競爭力比別人強。
面試風氣
簡單的問題都不好意思問,怕面試者鄙視面試公司問的問題。現在有一股妖風,不管啥公司都慢慢像阿里這樣的公司靠近,面試不問點jvm、並發、分布式都不好意(雖然公司可能沒有用到,雖然可能僅僅CURD),老是覺得問問這些顯得逼格高點,不管處於什么原因很多公司的確都在學習他們,都在問這些問題,那么我們就朝着這些大的方向努力也是沒錯的,如果朝着這些方向努力就是他們需要的人才,那么也就對了。
類似其他,比如高並發 鎖、分布式、緩存等都可以考慮考慮這樣思考,你會有不一樣的收獲的。
如果讀完覺得有收獲的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!