• JVM安全点操作与测试小记


    JVM的安全点学习与代码测试

    监控安全点(打印JVM停顿时间,不止GC,处理毛刺):

    -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime 

    取消偏向锁:

    -XX:-UseBiasedLocking

    1.Code

    public class SafepointTest {
    
        static double sum = 0 ;
    
        public static void foo(){
            for (int i = 0 ; i < 0x77777777 ; i++) {
                sum += Math.sqrt(i);
            }
        }
    
        public static void bar() {
            for (int i = 0 ; i < 50_000_000 ; i++) {
                new Object().hashCode();
            }
        }
    
        public static void main(String[] args) {
            new Thread(SafepointTest::foo).start();
            new Thread(SafepointTest::bar).start();
        }
    }

    2.安全点进入测试 VM参数设置

    安全点进入,日志详情查看:-XX:+PrintSafepointStatistics

    返回结果:

             vmop                    [threads: total initially_running wait_to_block]    [time: spin block sync cleanup vmop] page_trap_count
    0.289: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     1    ]  1   
    0.359: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     0    ]  1   
    0.422: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     0    ]  1   
    0.482: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     1    ]  1   
    0.566: ParallelGCFailedAllocation       [      12          1              2    ]      [     0     0     0     0     1    ]  1   
    0.634: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     1    ]  1   
    0.785: ParallelGCFailedAllocation       [      12          1              2    ]      [     0     0     0     0     5    ]  1   
    0.963: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     0    ]  1   
    1.302: ParallelGCFailedAllocation       [      12          1              2    ]      [     0     0     0     0     0    ]  1   
    1.589: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     0    ]  1   
    1.857: ParallelGCFailedAllocation       [      12          1              1    ]      [     0     0     0     0     0    ]  1   
    4.200: EnableBiasedLocking              [      11          1              1    ]      [     0     0     0     0     0    ]  1   
    5.674: no vm operation                  [       9          0              1    ]      [     0     0     0     0   495    ]  0   

    结果分析:

    JVM-GC日志解析:
      此日志分为二段,第一段是时间戳,VM Operation的类型,以及线程概况
        total:安全点里的总线程数
        initially_running:安全点时开始时正在运行状态的线程数
        wait_to_block:在VM Operation开始前需要等待其暂停的线程数
      第二段是到达安全点时的各个阶段以及执行操作所花的时间,其中最重要的是vmop
        spin:等待线程响应safepoint号召的时间
        block:暂停所有线程所用的时间
        sync:等于spin + block , 这是从开始到进入安全点所耗的时间,可用于判断进入安全点耗时
        cleanup:清理所有时间
        vmop:真正执行VM Operation的时间

     3.生产上安全点日志记录问题

    生产上需要将安全点日志打印到独立文件,VM配置如下:

    -XX:+UnlockDiagnosticVMOptions 
    -XX:-DisplayVMOutput 
    -XX:+LogVMOutput 
    -XX:LogFile=/dev/nya/vm.log

    打开Diagnostic(只是开放了更多的flag可选,不会主动激活某个flag),关掉输出VM日志到stdout,输出到独立文件,/dev/nya目录(内存文件系统)。

  • 相关阅读:
    gdb调试的基本使用
    重构改善代码--代码的坏味道
    17级单片机期中测试题目
    左右固定,中间自适应的三栏式布局五种写法
    存一些可能会用得到的vue的UI框架
    vue父子组件传值
    [Vue warn]: Missing required prop: "title"
    js中的值类型和引用类型的区别
    vue+node+mongoDB 火车票H5(四)---完成静态页面
    vue+node+mongoDB 火车票H5(三)---git提交时忽略不想提交的文件
  • 原文地址:https://www.cnblogs.com/nyatom/p/9705822.html
Copyright © 2020-2023  润新知