JVM啓動參數腳本的再學習與研究

JVM啓動參數腳本的再學習與研究


摘要

學無止境
前段時間一直再研究JVM參數調優.
但是最近也在想不應該僅研究如何調優. 
因爲不管怎麼設置, 總有豬隊友會把環境搞崩.
所以應該想辦法在無人值守的情況下能夠啓動服務. 
systemd這種主流方式有時候不靠譜, 進程可能判斷生死不準確.
所以還是想通過JVM的參數進行一定程度的優化.

啓動腳本的優化方式

EXTRACONFIG="-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+SafepointTimeout \
-XX:SafepointTimeoutDelay=2000  -XX:+UseCountedLoopSafepoints  -XX:-UseBiasedLocking \
-XX:+UnlockDiagnosticVMOptions -XX:GuaranteedSafepointInterval=0 -XX:+PrintGCApplicationStoppedTime \
-XX:+PrintGCDetails -XX:-DisableExplicitGC -XX:+PrintGC -XX:+PrintGCDateStamps  -XX:-UseGCOverheadLimit \
-XX:+PrintGCTimeStamps -Xloggc:./dump/gclog -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump "

# 注意增量配置不應該直接用於生產, 此配置可以用來分析系統卡頓, STW時間較久等問題. 
# safePoint 主要是打印安全點的信息. 
# Print等參數可以用來打印出數據進行分析. 
# GC以及GCDtails 可以展示詳細的GC信息,便於分析
# HeapDump可以進行一場時堆棧的轉儲
# -XX:-UseGCOverheadLimit 可以抑制部分98時間內只能釋放2%內存的提示, 實現fastfailue. 快速啓動. 

異常後處理的方法

RESTARTCONFIG="-XX:+HeapDumpOnCtrlBreak  -XX:OnOutOfMemoryError="at -f /myaoo/restart.sh now +0.5 minutes;kill -9 %p;""

# 注意 雖然有網頁收可以通過ctrl + break的方式抓取dump 但是我發現好像並沒有效果
# 注意可以使用 OnOutOfMemoryError的方式執行腳本
# 建議是自定義腳本, 設置好路徑與權限, 能夠一鍵執行. 
# 可以通過 %p 獲取當前進程信息執行清理操作, 避免內存佔用光了. 

可以通過 yum install at -y  或者是 apt-get install at 的方式來安裝 at命名 便於延時執行腳本
也可以使用 sleep的腳本來實現. 

如果使用 at 腳本需要將atd服務置爲可用狀態
systemctl enabled atd && systemctl restart atd

免責聲明

其實可以通過K8S的POD保活機制來實現服務的高可用更加方便.
手工寫腳本的方式其實需要判斷很多關鍵事項. 
如果基礎設施不完備的情況下,又不想每天定鬧鐘看預警是可以自動化來處理的. 
自己博客裏寫的很多東西測試爲主, 生產必須要經過嚴格測試纔可以做修改. 

生產是很重要的, 必須要敬畏生產,生產環境經常是: 左右天堂右手地獄.稍有不慎可能滿盤皆輸
成年人的世界沒有簡單二字, 想做好一個事情其實很難
但是搞糟他卻非常容易. 
希望產品不宕機,大家都可以好好睡覺. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章