2020年騰訊雲KonaJDK開源貢獻總結


導語:在2020年發佈的 JDK15 中,騰訊成爲國內廠商歷史首位 Notable 貢獻者,全球貢獻第五。java


時光飛逝,一轉眼,2020年已經結束,自2019年11月KonaJDK開源,也已超過一年。在過去的這一年裏,KonaJDK不斷提高,銳意進取,爲騰訊內部及外部雲上客戶提供了穩定的Java運行環境。關於KonaJDK服務騰訊及雲業務,咱們已經在《KonaJDK 賦能雲上 Java 新生態》一文中作了表述。與此同時,2020年咱們也積極參與了OpenJDK開源社區貢獻。2021新年伊始,咱們以騰訊雲JDK工具提高方面的貢獻爲例,總結2020年騰訊KonaJDK參與社區的工做。web






Serviceability



並行堆掃描算法


在JDK內存分析工具中, Jmap是最爲經常使用的一種,其中 jmap -histo工具會對java堆進行遍歷,統計每個對象所屬的類型,最後會給出這樣一個數據:

這些數據展現了每一個類存在的對象數,以及這些對象一共佔據的內存大小。 此類信息對於java堆使用狀況統計,內存泄漏問題分析都很是有用。  

可是在實際使用中,咱們發現 jmap 的一次使用要消耗很長時間。例如在筆者的開發環境上,用Jmap -histo <pid> 掃描一個包含6GB對象的java堆,要耗費4秒左右的時間。而在一些超大堆的場景下,如大數據業務,因爲 jmap 在運行過程當中須要暫停 Java 業務線程,因此可能會出現一次 jmap 發生致使 Java 進程無響應,從而主備結點切換,最終形成業務系統抖動。微信


通過調研,咱們對jmap -histo原理進行了分析,並作了並行化優化,以下圖

在具體實現上,雖然咱們針對的是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


下圖是使用jmap -dump <pid>與jmap -dump:gz=1 <pid> 在相同測試進程,相同堆佔用狀況下獲得的heap dump文件,文件大小壓縮了7倍左右:

一樣,咱們目前正在將這一特性引入KonaJDK8中,用戶很快會在KonaJDK8與騰訊雲產品中看到相應的支持。






2020年騰訊在OpenJDK社區對外貢獻小結



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個。


在2020年發佈的 JDK15 中, 騰訊 成爲國內廠商歷史首 位 Notable 貢獻者 全球貢獻第五

以上只是騰訊雲KonaJDK團隊在2020年做爲OpenJDK社區新同窗的第一份答卷。 在2021年,咱們會更加努力,保障騰訊及客戶Java業務高效穩定的同時,將咱們的經驗進一步輸出到社區,與社區共建更好的Java生態!


《KonaJDK賦能雲上Java新生態》


《不要再亂下載JDK了:Elasticsearch在國產化ARM環境下的首個大坑》


日調1000億,騰訊微服務平臺的架構演進


關於微服務拆分,聽聽一位微服務架構師的肺腑之言


《聊一聊微服務架構中的服務發現系統》



掃描下方二維碼關注本公衆號

瞭解更多微服務、消息隊列的相關信息



戳原文,瞭解更多KonaJDK的信息

點亮在看,你最好看

本文分享自微信公衆號 - 騰訊雲中間件(gh_6ea1bc2dd5fd)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索