jinfo_动态调整JVM参数(无需重启)(实践)

时间:2021-10-11 10:30:55
​本文演示在JVM进程运行过程中动态开启/关闭 GC输出,无需重启JVM进程

jinfo使用介绍
可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数
-flag <name> pid:打印指定JVM的参数值 
-flag [+|-]<name> pid:设置指定JVM参数的布尔值
-flag <name>=<value> pid:设置指定JVM参数的值

有一点必须注意:PrintGC必须开启,只开启PrintGCDetails、PrintGCTimeStamps不会输出GC,必须PrintGC同时开启
1、JVM启动时设置以下参数:-Xmx20m -Xms20m -Xmn2m,代码如下(改代码会发生GC)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static void s2() {
       String name = ManagementFactory.getRuntimeMXBean().getName();
       // get pid
       String pid = name.split("@")[0];
       System.out.println("Pid is:" + pid);
        
       while(true)
       {
           byte[] b = null;
           for (int i = 0; i < 10; i++)
               b = new byte[1 * 1024 * 1024];
 
           try {
               Thread.sleep(5000);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
   }

2、使用jinfo查看JVM GC的相关参数值

jinfo_动态调整JVM参数(无需重启)(实践)

3、启动GC输出

jinfo_动态调整JVM参数(无需重启)(实践)

4、控制台GC输出

170.658: [GC [PSYoungGen: 0K->0K(1536K)] 18091K->18091K(19968K), 0.0006562 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

170.658: [GC [PSYoungGen: 0K->0K(1536K)] 18091K->18091K(19968K), 0.0003981 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

170.659: [Full GC [PSYoungGen: 0K->0K(1536K)] [ParOldGen: 18091K->2048K(18432K)] 18091K->2048K(19968K) [PSPermGen: 3280K->3280K(21504K)], 0.0060813 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]

5、参考资料

http://www.open-open.com/lib/view/open1437018491912.html