導語:在2020年發佈的 JDK15 中,騰訊成爲國內廠商歷史首位 Notable 貢獻者,全球貢獻第五。java
時光飛逝,一轉眼,2020年已經結束,自2019年11月KonaJDK開源,也已超過一年。在過去的這一年裏,KonaJDK不斷提高,銳意進取,爲騰訊內部及外部雲上客戶提供了穩定的Java運行環境。關於KonaJDK服務騰訊及雲業務,咱們已經在《KonaJDK 賦能雲上 Java 新生態》一文中作了表述。與此同時,2020年咱們也積極參與了OpenJDK開源社區貢獻。2021新年伊始,咱們以騰訊雲JDK工具提高方面的貢獻爲例,總結2020年騰訊KonaJDK參與社區的工做。web
並行堆掃描算法
可是在實際使用中,咱們發現 jmap 的一次使用要消耗很長時間。例如在筆者的開發環境上,用Jmap -histo <pid> 掃描一個包含6GB對象的java堆,要耗費4秒左右的時間。而在一些超大堆的場景下,如大數據業務,因爲 jmap 在運行過程當中須要暫停 Java 業務線程,因此可能會出現一次 jmap 發生致使 Java 進程無響應,從而主備結點切換,最終形成業務系統抖動。微信
在具體實現上,雖然咱們針對的是jmap這個工具,但實際上更多的修改是在GC方面,針對不一樣的GC算法,堆的佈局不同,也須要採用不一樣的並行方式來適配。例如:網絡
-
ParallelScavenge 按照不一樣的分代空間進行並行掃描 -
G1 按照不一樣的region進行並行掃描 -
ZGC與ShenandoahGC 基本上是實現了一個並行的marking機制
基於不一樣的實現方法,優化效果也會不同,但整體上達到了2-8倍的並行堆掃描速度提高。下圖是一樣機器上針對G1GC堆的掃描測試結果(-Xmx8g,堆中對象達到6GB):架構
目前,對於不一樣GC的patch都已經提交到社區並被接收。用戶也很快會在KonaJDK8上看到相應的功能,包括對CMS堆的支持。app
gzipped heap dump運維
在實際業務中,根據運維人員的反饋,咱們發現jvm提供的heap dump功能存在必定的缺陷——dump的數據文件很是大,在網絡帶寬受限的狀況下難以傳輸,很是不便。經過參與社區的研發,咱們發現最近開源社區中對於jcmd增長了Gzipped heap dump支持。可是對於其餘經常使用heap dump工具如jmap、jhsdb 等都沒有增長相應支持,而且咱們也沒有觀察到社區在這方面的計劃。所以,做爲社區的一員,同時爲了解決咱們運維人員以及雲業務用戶在使用上的痛點,咱們對jmap、jhsdb等工具添加了compressed heap dump的支持。目前針對jmap的patch已經合入社區,針對jhsdb的patch因爲須要變更heapdump的實現,社區還在review中,咱們會持續跟進。jvm
2020年, 騰訊KonaJDK團隊做爲OpenJDK社區的新成員,整年貢獻70多個commits,主要是HotSpot(JIT、Runtime和GC)、SVC、Core Libraries和Infrastucture等領域,總代碼修改量2000+行。編輯器
其中比較重要的包括:HotSpot核心模塊9個patch、Vector API AVX512向量支持 6個patch、map大堆Heap Inspection並行加速優化4個。
《不要再亂下載JDK了:Elasticsearch在國產化ARM環境下的首個大坑》
掃描下方二維碼關注本公衆號,
瞭解更多微服務、消息隊列的相關信息!
本文分享自微信公衆號 - 騰訊雲中間件(gh_6ea1bc2dd5fd)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。