在2016舊金山QConf大會的解決方案進展情況報告會上,Twitter為我們呈現(xiàn)了一些演講。昨天,Twitter的JVM團隊對外公布他們正在開發(fā)、發(fā)布和維護一個JDK分支版本。這個JDK是OpenJDK的分支,在Twitter內(nèi)部發(fā)行,目前可以支持OSX和Linux,每個月發(fā)布一次,如果有緊急版本會縮短發(fā)布時間。來自Twitter的John Coomes告訴我們,在如何對OpenJDK的特性進行趨異演化方面,Twitter所做的跟Oracle-JDK有些類似。當(dāng)被問及Twitter是如何決定對上游OpenJDK的變更進行合并時,Coomes回答說,這個取決于要發(fā)布的特性,況且他們并不打算維護一個跟OpenJDK主干分支緊密耦合的版本。
Twitter-JDK帶來一些新的特性,比如經(jīng)過擴展的堆內(nèi)存分析、異步垃圾回收日志、二進制日志框架Contrail、中間代G1、更豐富的API和命令行參數(shù)、性能改進以及缺陷修復(fù)。Twitter-JDK的一些改進特性也會被上游的OpenJDK所采用。
Coomes提到了在OpenJDK的JVM里存在的一些問題,特別是GC的長時間停頓問題。一種改進的措施是把I/O密集和對延遲敏感的任務(wù)分開執(zhí)行。不過Twitter有成千上萬個運行在JVM上的服務(wù),對它們進行分離是個很枯燥的工作。我們可以在達到安全點時關(guān)閉JVM的I/O,不過這樣會降低對JVM的監(jiān)控能力。隨著基于Python的服務(wù)逐漸向基于JVM的服務(wù)遷移,Twitter的JVM服務(wù)數(shù)量只增不減。Twitter正在通過實現(xiàn)異步GC日志和jvmstat來解決這些挑戰(zhàn)所帶來的問題。這樣,GC停頓就不會再阻塞I/O。Coomes說之后將會發(fā)布Contrail,Contrail包含了一個JIT編譯器和運行時,支持堆棧跟蹤,可以作為實現(xiàn)異步GC日志的支持框架。Twitter-JDK實現(xiàn)了貝葉斯優(yōu)化算法,這個技術(shù)借鑒自機器學(xué)習(xí),讓JVM可以持續(xù)高效地學(xué)習(xí)模糊成本函數(shù),可以更快地找到更優(yōu)的處理路徑。
被問及Twitter-JDK的VM調(diào)優(yōu)參數(shù)時,Coomes說大概有30個參數(shù)可以用來對VM進行調(diào)優(yōu)。用來衡量VM性能的成本函數(shù)就是指在GC期間每秒可以處理的請求數(shù)。Twitter在測試環(huán)境使用這30個參數(shù)對新VM進行了70輪GC測試,結(jié)果在性能上有182%的提升。未來的工作將包括對VM進行壓力測試或極限測試、更長的試驗期、基于Mesos的并發(fā)試驗以及及早探測并結(jié)束無效試驗的能力。
查看英文原文:JVMs Across the Data Center and Twitter's JDK