java8 jvm 中建议设置的启动参数 JAVA_OPTS
JAVA_OPTS="-Xms4096m -Xmx4096m -XX:MetaspaceSize=256m"
这两个参数可以出发 gc
Xms/ xmx 用来 设置堆内存的大小
-Xmn: 堆内新生代的大小
MetaspaceSize 设置 Metaspace 触发 fullgc 的大小
还可以设置线程的大小, 默认如下:
Linux/x86 (64-bit): 1 MB
macOS (64-bit): 1 MB
Oracle Solaris (64-bit): 1 MB
On Windows, the JVM uses the system-wide stack size
-Xss: 减少这个值,可以多生成线程
java 启动命令常用配置
java -javaagent:/skywalking-agent.jar -jar -Xms512m -Xmx512m -Xmn128m -XX:MetaspaceSize=256m -XX:-OmitStackTraceInFastThrow -Dserver.port=8080 config-center-api-1.0.0.jar --spring.profiles.active=prod
内存参数设置:
-Xms1024m (java堆最大大小)
-Xmx1024m (java堆默认大小)
-Xmn256m (新生代大小) 可以通过比例替代
-Xss256k (线程大小)
-XX:MetaspaceSize=128m (元空间触发gc值)
如果没有配置-XX:MetaspaceSize,那么触发FGC的阈值是21807104(约20.8m),可以通过jinfo -flag MetaspaceSize pid得到这个值
如果配置了-XX:MetaspaceSize,那么触发FGC的阈值就是配置的值;
Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC
如果MaxMetaspaceSize设置太小,可能OOM;
-XX:MaxMetaspaceSize=128m (元空间最大大小,默认物理机内存,达到了oom)
-XX:NewRatio=n: 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去 metaspace),默认 2,也就是 年轻代:年老代 = 1:2
如果设置为4,那么 年轻代:年老代=1:4,年轻代占整个堆栈的1/5。
-XX:SurvivorRatio=8 年轻代中Eden区与两个Survivor区的比值。默认8, 也就是 两个Survivor:Eden = 2:8
如果设置为4,则 两个Survivor区:Eden区=2:4,一个Survivor区占整个年轻代的1/6
堆溢出参数设置
-XX:+HeapDumpOnOutOfMemoryError(内存溢出时dump堆)
-XX:HeapDumpPath=logs/heapdump.hprof(发生OOM时,dump出快照到文件heapdump.hprof)
在Java程序的运行过程中,如果对空间不足,则会抛出内存溢出的错误(Out Of Memory)OOM
Java虚拟机提供了-XX:+HeapDumpOnOutOfMemoryError, 使用该参数可以在内存溢出时导出整个堆信息,与之配合使用的还有参数-XX:HeapDumpPath,可以设置导出堆的存放路径。
内存分析工具:Memory Analyzer
配置运行时参数 -Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/Demo3.dump
GC 设置
-Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
-XX:+UseParallelGC :选择垃圾收集器为并行收集器。 此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20 :配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC :配置年老代垃圾收集方式为并行收集。JDK6.0 支持对年老代并行收集。
辅助打印信息
-XX:+PrintHeapAtGC(打印GC前后堆内存情况)
-XX:+PrintGCDetails (打印详细的GC日志)
-XX:ErrorFile=logs/java_error%p.log(错误文件,当java发生致命错误时,例如jdk的bug等。记录错误日志用于上报分析)
开启gc.log 把 gc.log 导出来
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc:/usr/local/log/gc.log
更改端口的两种方式:
java命令参数:java -jar <path/to/my/jar> --server.port=7788
JDK 参数的方式:java -Dserver.port=7788 -jar <path/to/my/jar>
共 0 条评论