JVM启动参数脚本的再学习与研究

jvm,启动,参数,脚本,学习,研究 · 浏览次数 : 176

小编点评

**JVM启动参数脚本优化** **一、避免不必要的参数** * **`-XX:+PrintSafepointStatistics`** 和 **`-XX:PrintSafepointStatisticsCount=1`** 可一起移除,因为可以同时使用 **`-XX:PrintSafepointStatistics`** 获取多个安全点统计信息。 * **`-XX:+UseCountedLoopSafepoints`** 和 **`-XX:-UseBiasedLocking`** 可以一起移除,因为 **`-XX:UseBiasedLocking`** 会在使用 Biased locking 时禁用 Counted locking。 * **`-XX:+UnlockDiagnosticVMOptions`** 和 **`-XX:GuaranteedSafepointInterval=0`** 可以一起移除,因为 **`-XX:GuaranteedSafepointInterval=0`** 可以导致 GC 延迟。 **二、调整参数值** * **`-XX:+HeapDumpOnOutOfMemoryError`** 的默认值是 **`at -f /myaoo/restart.sh now +0.5 minutes;kill -9 %p;\``**,建议将其改为 **`-XX:HeapDumpOnOutOfMemoryError=\"at -f /myaoo/restart.sh now +0.5 minutes;kill -9 %p;\"`**,以避免出现 **“Too many open files”** 错误。 * **`-XX:+PrintGCApplicationStoppedTime`** 可以用于监控 GC 停机的时间,但它默认值为 **10 秒**,可能不够精确,建议将其设置为 **1 秒**。 **三、使用其他方法** * 使用 systemd 的 **`systemctl restart service_name`** 命令可以重启服务。 * 使用 systemd 的 **`systemctl stop service_name`** 命令可以停止服务。 * 使用 systemd 的 **`systemctl watch service_name`** 命令可以监控服务的状态变化。 **四、测试脚本** * 在生产环境中,测试脚本的稳定性和可靠性。 * 使用压力测试工具(例如 JMeter 或 LoadRunner)模拟负载并测试脚本的性能。

正文

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

生产是很重要的, 必须要敬畏生产,生产环境经常是: 左右天堂右手地狱.稍有不慎可能满盘皆输
成年人的世界没有简单二字, 想做好一个事情其实很难
但是搞糟他却非常容易. 
希望产品不宕机,大家都可以好好睡觉. 

与JVM启动参数脚本的再学习与研究相似的内容:

JVM启动参数脚本的再学习与研究

JVM启动参数脚本的再学习与研究 摘要 学无止境 前段时间一直再研究JVM参数调优. 但是最近也在想不应该仅研究如何调优. 因为不管怎么设置, 总有猪队友会把环境搞崩. 所以应该想办法在无人值守的情况下能够启动服务. systemd这种主流方式有时候不靠谱, 进程可能判断生死不准确. 所以还是想通过

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆

[转帖]java -jar 参数说明

jvm 选项 Java启动参数共分为三类; 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不

[转帖]【JVM】常用虚拟机参数及实例

常用参数表 参数描述-XX:+PrintGC启动java虚拟机后,只要遇到gc,就打印日志-XX:+PrintGCDetailsgc发生时,打印更详细的日志-XX:+PrintHeapAtGC每一次GC后,都打印堆信息-XX:+PrintGCTimeStampsgc发生时,额外打印gc时间,该时间为

[转帖]JVM 参数

https://www.cnblogs.com/xiaojiesir/p/15636100.html 我们可以在启动 Java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内存管理和垃圾回收的 GC 算法,添加和处理调试和诊断信息等等。 JVM参数选项 类型一:标准参数选项

[转帖]Native Memory Tracking 详解(1):基础介绍

https://www.modb.pro/db/516032 0.引言 我们经常会好奇,我启动了一个 JVM,他到底会占据多大的内存?他的内存都消耗在哪里?为什么 JVM 使用的内存比我设置的 -Xmx 大这么多?我的内存设置参数是否合理?为什么我的 JVM 内存一直缓慢增长?为什么我的 JVM 会

Tomcat目录结构

Tomcat目录结构图如下: 1、bin目录 存放一些可执行的二进制文件,.sh 结尾的为linux下执行命令,.bat 结尾的为windows下执行命令。 catalina.sh:真正启动tomcat文件,可以在里面设置jvm参数。 startup.sh:启动tomcat(需事先配置好JAVA_H

[转帖]【JVM】G1垃圾收集器的关键技术

前言 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信熟悉JVM的同学们都不会对它感到陌生。在JDK 9中,G1被提议设置为默认垃圾收集器(JEP

JVM启动速度大页内存验证

大页内存设置 先查看 cat /proc/meminfo |grep -i huge 获取大页内存的大小信息. AnonHugePages: 42022912 kB HugePages_Total: 158720 HugePages_Free: 1005 HugePages_Rsvd: 0 Huge

[转帖]记录一次spring-boot程序内存泄露排查

现象 spring boot项目jvm启动配置-Xms4g -Xmx4g,然而很不幸的是程序所占的内存越来越高,都达到了12个多G,只能临时重启服务 常用命令 jstat -class PIDjstat -compiler PIDjstat -gc PIDjstat -gccapacity PIDj