2020年5月31日 星期日

深入理解JVM & G1 GC



大部份的電腦技術書藉像是塊墊腳石,它們能拉升讀者的知識水平,讓人以全新的視野檢視概有的問題。而這本多達200頁的Java技術專書,就是協助讀者跨越JVM的知溝,得以有能力毫無困惑地看完下列這篇G1 GC調校的文章。(https://www.oracle.com/technical-resources/articles/java/g1gc.html)

從事Java程式開發數年,也是最近才著手調整JVM的GC算法參數。因為負責的推薦系統,有高標準的系統回應速度(三秒必須回應),整個系統架構中又含有Java-based的中間層服務。在中間層執行時需要較大Heap記憶體的情境下(十幾GB),如果還使用預設的Parallel GC算法那肯定是不行的(馬上遇到STW/Stop the world的苦果)。因此我改為採用G1 GC算法,它是從JDK7起開始現身,是專為高強度的伺服器端應用程式所設計,強調其能在超大記憶體配置下依舊維持極短GC停頓。

雖然網路上和G1 GC相關的資料多如繁星,卻沒能有系統地整理並釐清眾多GC算法參數之間的脈絡。JVM GC有著多樣的算法(Serial/Parallel/CMS/G1GC),年代型的GC又可細分為Young年代和Old年代。如果沒有按照算法演進順序來一一說明參數功能,光是看到一串名稱大同小異的GC參數組,真的會讓人一頭霧水。恰好本書對症下藥,用循序漸進的章節規劃,擇要介紹常見的GC算法/參數。後半部才正式進入主題,深入說明G1 GC算法的精要。只有極小段落的字句不甚流暢,翻閱時需要另外查詢英文資料補佐理解,讓全書有點缺憾。

不可諱言我從書中學到的知識,讓我解決了前敘提到的推薦系統效能問題,但其中仍然是充滿著不斷間的試誤(Try and Error)過程。藉由檢視gc.log的內容發現遲緩點,嘗試組合不同的GC參數值,調整後觀察運行狀況,中間絲毫沒有捷徑可走。也曾嘗試直接套用網路文章上的「G1 GC最佳參數」設定值,結果等著我的是一次最嚴重的STW停頓(暫停數十秒)。如同作者周明耀所言,GC調校這項任務,會因為不同應用程式的行為、和不同主機間的資源差異,導出截然不同的最適參數組合。在JVM的世界,沒有一組照本宣科的萬用參數組合,只能仰賴程式/系統人員的心力,試圖找出GC運作的「甜蜜點」。

[後記]
最後試出來的JDK 1.7 G1GC參數:
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:GCLogFileSize=50M
-XX:NumberOfGCLogFiles=7
-XX:+UseGCLogFileRotation
-Xloggc:/usr/local/solr/logs/gc.log
-Xmx20g
-Xms20g
-XX:+ParallelRefProcEnabled
-XX:ConcGCThreads=32
-XX:ParallelGCThreads=32
-XX:G1ReservePercent=50
-XX:InitiatingHeapOccupancyPercent=10
-XX:G1HeapWastePercent=1
-XX:G1MixedGCLiveThresholdPercent=80
-XX:MaxGCPauseMillis=900
-XX:+PrintAdaptiveSizePolicy
-XX:+UnlockExperimentalVMOptions
-XX:G1HeapRegionSize=10m
-XX:+UseG1GC

觀察用指令:
# cat gc.log.0 | grep "Eden" -A 0

相關網址:

2020年5月10日 星期日

絕望者之歌:一個美國白人家族的悲劇與重生




回想2017年時美國總統川普當選的消息傳來,台灣主流媒體一片呼天搶地的哀嚎,彷彿眼見到世界末日的來臨。而在看過「美國,原來如此!走進偉大與荒唐共存的大國日常」後,才發覺川普也有為數眾多的支持者。(不然怎麼選得上)。這些台灣媒體視為「愚民」的美國人,對柯林頓與歐巴馬一脈相承的經濟自由化、產業全球化的路線深感不滿,最後用手中的一票,暫時阻礙了美國產業外移的腳步,期望川普能帶領國家回到那個以中產階級為主的美好時代。

肯定是種媚外心態,大部份的人,看到金髮碧眼的白人走在街上,會覺得他們就是高所得、有文化,賺得是美元,消費能力一定高人一等。然而「絕望者之歌」一書的作者「凡斯」,在本書中卻是講述了一個我們臆想不到的社群故事。「白人鄉巴佬」,作者懷著自豪這麼的稱呼這群人。他們自小就得和貧窮、毒品打交道,可能遭遇藥物上癮的單親媽媽的不當管教,物質生活的窮困、對未來的無力感與實際上的不做為,眼見就是一股向下流動的螺旋風暴,一般讓人聯想到非裔、拉丁社群,卻很難認為歐洲後裔的美國人也有一樣的問題。凡斯正是出身自這樣的「鄉巴佬」家族,從曾祖父母起,就是性情彪悍但又重視家庭、名譽的一群「現代牛仔」,書中內容就是作者回顧他半生所見,一本和他的家族、這個社群的第一手「深入報導」與回憶錄。

「絕望者之歌」不是一本與人格教養相關的學術論文,但它藉由一個具體的案例告訴了我們,家庭、社區、族群對一個人的成長發展,會有多大的影響。長期為大眾忽視的白人工人階級,默默地承受著全球化產業外移造成的苦果。隨著生活的逐漸地無以為繼,無法再追求「美國夢」的「鄉巴佬」們,終究在2017年出現了一個大反撲,將那位言必稱「讓美國再次偉大」的唐納川普,一舉推向了美國總統的寶座。這是賞了華府、主流媒體等位居社經高點的統治階級一個大巴掌,卻也平衡了不斷踩油門加速的精英政治態勢。隔著太平洋透過媒體來得知美國民情的台灣人,不可避免地受到媒體主事者的輿論操作。社論、短評與深度報導的背後,多半潛藏著歐巴馬主義的產業自由化、全球化的思維。然而這本「絕望者之歌」替我們打開視野,得以用更開擴、更多樣性的角度,去觀察、理解美國今日面臨的社經問題。

書中後半提到的社會資本,道理就像市井小民掛在講上的「有關係就沒關係」。有時你認識誰,比你能做什麼更重要,也是老生常談的「人脈」的重要性。很多社會新鮮人會參加研討會、座談會,與同業、跨業的專家交換名片搭上話,積極地經營自己的人脈,這絕對替職涯發展有正向地效益。但更深一層的人脈學常是隱而不宣、非個人自力所能掌握。真正能讓人生際遇有突發性成長的關鍵人脈,常是來自父執長輩間的同窗或同僚情誼,一句「我兒子/學弟最近...」的閒聊,可能就成了某個重要職務臨門一腳的決勝點。而這種檯面下的社會階級世襲制,也是今日體制、人才流動停滯的原因之一。如同「乾脆躺平算了!?:關於翻身,那些沒說的故事」一書曾提到的,小康家庭出身的一般小市民,如果工作能力出類拔萃,在職涯發展的某一天肯定會碰到一道無形的天花板。那是一群從小不知困乏為何者的排外群體,而他們多半位於決策圈的致高點,從巴比倫塔上俯瞰世界。這正是「鄉巴佬」們對「希拉蕊」的看法。