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目录(内存文件系统)。

JVM安全点操作与测试小记的更多相关文章

  1. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式

    [1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...

  2. JVM堆内存设置和测试

    1. Java虚拟机内存结构 划分新生代和老年代,这样只在新生代分配内存,从而简化了新对象的分配.另外新生代和老年代使用不同的GC算法,可以更有效的清除不再需要的对象.从上图可以看出,JVM内存由yo ...

  3. MySQL 复制+快照恢复误删除操作实验测试

    下面假定2个场景: 场景1:主从架构,没有延迟,某DBA误操作:drop database [复制+快照:在线备份]场景2:存在不确定性或者风险性较大的操作,如升级测试,大表变更[啥事都在快照上折腾, ...

  4. java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作

    项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...

  5. fopen & fcolse & fseek & ftell & fstat 文件操作函数测试

    1.文件大小查询file_size.c 方法一:fseek + ftell: 方法二:ftell #include <stdio.h> #include <fcntl.h> # ...

  6. Android自动化框架 模拟操作 模拟测试

    转自:http://bbs2.c114.net/home.php?mod=space&uid=1025779&do=blog&id=5322 几种常见的Android自动化测试 ...

  7. monkey测试小记

    本篇中不记录环境搭建,只是介绍一些经验和小秘诀吧. 一.使用安卓模拟器进行测试. 在刚刚接触到monkey测试的时候,用的真机进行测试,点击几万次甚至更多的时候,发现系统变慢了.也许是错觉,但是系统经 ...

  8. mysql常用操作(测试必备)

    现在互联网的主流关系型数据库是mysql,掌握其基本的增.删.改.查是每一个测试人员必备的技能. sql语言分类 1.DDL语句(数据库定义语言): 数据库.表.视图.索引.存储过程,例如:CREAT ...

  9. springboot jpa 级联操作及测试问题 (@Transactional与@Test)

    前言:测试springboot版本     :springBootVersion = '2.0.5.RELEASE' 一 :搬运@Transactional B. 如果加了事务,必须做好开发环境测试( ...

随机推荐

  1. JVM调优常用参数和注意点备忘录

    本文主要是工作过程中总结的一些jvm调优的参数和注意的地方,作为一个备忘录,先占个坑,有时间在来细化具体的实例. gc日志是覆盖的方式如果文件名字固定会导致上一次被覆盖可以采用这个-Xloggc:ba ...

  2. 【php增删改查实例】第二十六节 - 个人详情页制作

    在一般的系统中,当用户点击头像的时候,就会跳转到对应的个人详情页,在这个页面,他可以查看和修改自己的个人信息,或者更换头像. 本案例中,个人详情页使用bootstrap框架. 首先,我们新建一个htm ...

  3. 两个select之间的元素互相移动并保持顺序

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. [书籍]用UWP复习《C#并发编程经典实例》

    1. 简介 C#并发编程经典实例 是一本关于使用C#进行并发编程的入门参考书,使用"问题-解决方案-讨论"的模式讲解了以下这些概念: 面向异步编程的async和await 使用TP ...

  5. SVM(支持向量机)之Hinge Loss解释

    Hinge Loss 解释 SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,这是一种理论非常充实的解法.这里换一种角度来思考,在机器学习领域,一般的做法是经验风 ...

  6. 这款APP太像微信 腾讯起诉索赔1000万

    去年8月,“币应”(inChat)APP上线,号称是一款原创的区块链加密通讯工具,而界面与微信极为相似,图标是白配绿色调,内部界面几乎一模一样,通讯录.朋友圈的界面完全相同.里面的小游戏,也从微信拿来 ...

  7. Linux模拟控制网络时延

    之前以为可以使用Linux自带的工具模拟控制网络时延,所以上网找了一些资料.后来发现,找到的资料目前只支持在一个网卡上模拟发送报文的时延,而不能设置有差别的网络时延,或者说当要模拟的向A发送的时延与要 ...

  8. PAT L3-010 是否完全二叉搜索树

    https://pintia.cn/problem-sets/994805046380707840/problems/994805049870368768 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  9. 日志分析工具之goAccess

    在此推荐一款分析日志的工具,方便我们日常对于网站的访问状况有一个较为清晰的了解  一.安装 官网: https://goaccess.io/download 源码安装: 1. wget http:// ...

  10. python内涵段子爬取练习

    # -*- coding:utf-8 -*-from urllib import request as urllib2import re# 利用正则表达式爬取内涵段子url = r'http://ww ...