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. Java验证工具类

    在项目中使用Java经常有验证功能的使用,比如手机号,密码等验证. 总结一下,写出个工具类方便以后用的时候直接引. package com.common.utils; import org.apach ...

  2. 串行FLASH文件系统FatFs---转自野火论坛

    为了支持长文件名,需要用到FATFS源码中的cc936.c的两个函数ff_convert,ff_wtoupper:这里面直接用了两个大数组(127KB)来做unicode转gbk(OEM)的对照表,这 ...

  3. Maven报错Archive for required library:某.jar' in project '项目名'

    Maven报错Archive for required library:某.jar' in project '项目名'cannot be read or is not a valid ZIP file ...

  4. ML.NET 示例:推荐之One Class 矩阵分解

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  5. Vue Router 路由实现原理

    一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash  ...

  6. Springboot通过cors解决跨域问题(解决spring security oath2的/oauth/token跨域问题)

    @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCo ...

  7. 结对项目:ATM

    一:结对项目名称:ATM 二:源代码及单元测试代码网址链接:https://github.com/tpp531853660 三:结对人的博客链接:http://www.cnblogs.com/Joan ...

  8. centos 检测aufs 并安装

    http://www.cnblogs.com/logo-fox/p/7366506.html 因为DeviceMapper不稳定,所以必须升级到3.10以上的内核,运行docker(2.6提示运行do ...

  9. vue单页面模板说明文档(2)

    Linter Configuration This boilerplate uses ESLint as the linter, and uses the Standard preset with s ...

  10. 3 Asking for more information

    1 Could you tell me more about your idea? 2 Could I hear more about your idea? 3 Could you expain yo ...