JVM参数及调优

JVM参数及调优

调优基本概念

常用JVM参数

demo

新建一个spring-boot工程,有一个启动类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.study.performance;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

// 启动程序,模拟用户请求
// 每100毫秒钟创建1000线程,每个线程创建一个512kb的对象,最多100毫秒内同时存在1000线程,并发量1000/s,吞吐量6000/s,查看GC的情况
@SpringBootApplication
public class PerformanceApplication {
public static void main(String[] args) {
SpringApplication.run(PerformanceApplication.class, args);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
new Thread(() -> {
for (int i = 0; i < 1000; i++) {
try {
// 不干活,专门512kb的小对象
byte[] temp = new byte[1024 * 512];
Thread.sleep(new Random().nextInt(100)); // 随机睡眠200毫秒秒以内
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}, 100, 100, TimeUnit.MILLISECONDS);
}
}

// 打包 mvn clean package
// 服务器上运行 performance-1.0.0.jar

mvn clean package命令或者下图的方式打包成performance-1.0.0.jar包在target目录下

scp /Users/wanyajing/Downloads/高级java程序员/专题一/Downloads/subject-1-master/chapter-3/target/performance-1.1.0.jar root@10.1.27.112:/opt/logs/jetty/ ———— 上传jar包到服务器上

java -Xmx1024m -jar performance-1.1.0.jar ———— 指定最大堆大小运行程序

GC调优思路

通用GC参数

收集GC日志(日志离线分析,主要用于检查故障看出是不是因为GC导致的程序卡顿)

不建议直接输出 java -Xmx1024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar performance-1.0.0.jar

java -Xmx1024m -Xloggc:/opt/logs/jetty/gc1.log -jar performance-1.1.0.jar 启动

scp root@10.1.27.112:/opt/logs/jetty/gc1.log ~/Desktop ——— 下载gc1.log到本地

分析GC日志()

GCViewer工具,辅助分析GC日志文件 https://github.com/chewiebug/GCViewer

打开工具页面,将log文件拖入

这样就能看见fullgc次数 时间 最大暂停时间 等等信息

也可通过jstat实时查看gc情况 ——— jstat -gc -h10 18101 1000

上面命令的简化版

具体参数调优过程参考本机的文章 JVM调优笔记.html

参考文档 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/