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保活机制来实现服务的高可用更加方便.
手工写脚本的方式其实需要判断很多关键事项. 
如果基础设施不完备的情况下,又不想每天定闹钟看预警是可以自动化来处理的. 
自己博客里写的很多东西测试为主, 生产必须要经过严格测试才可以做修改. 

生产是很重要的, 必须要敬畏生产,生产环境经常是: 左右天堂右手地狱.稍有不慎可能满盘皆输
成年人的世界没有简单二字, 想做好一个事情其实很难
但是搞糟他却非常容易. 
希望产品不宕机,大家都可以好好睡觉. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章