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. 基于 Django2 实现邮箱注册登录功能

    1. 开发环境 Python 3.6.5 Django 2.2 2. 项目功能 用户登录 邮箱注册 图形验证码 找回密码 修改密码 用户退出 3. 项目创建 首先创建项目: django-admin ...

  2. HBuilder使用夜神模拟器调试Android应用

    由于HBuilder的扫描机制无法直接连上夜神模拟器.我搞了好久终于找到办法了,分享给大家. 首先,启动HBuilder和夜神模拟器 然后打开cmd命令提示符 cd进入夜神模拟器bin目录 执行以下命 ...

  3. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  4. 性能调优8:分组聚合 - group by

    聚合实际上对数据做分组统计,SQL Server使用两种操作符来实现聚合,流聚合(Stream Aggregation)和哈希聚合(Hash aggration).流聚合是非阻塞性的,具有流的特性,流 ...

  5. 微信小程序获取formId时提示"the formId is a mock one"

    微信小程序使用模板消息需要使用表单提交 formId,因此进行了简单的代码测试,在 wxml 文件中创建 form 对象,并在 form 标签中声明属性 report-submit="tru ...

  6. Redux 入门教程(三):React-Redux 的用法

    为了方便使用,Redux 的作者封装了一个 React 专用的库 React-Redux,本文主要介绍它. 这个库是可以选用的.实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React ...

  7. [2019BUAA软工助教]第一次阅读 - 小结

    [2019BUAA软工助教]第一次阅读 - 小结 一.评分规则 总分 16 分,附加 2 分,共 18 分 markdown格式统一且正确 - 2分 不统一:扣 1 分 不正确:扣 1 分(例如使用代 ...

  8. 使用publisher模式控制频繁的UI输出,避免Winform界面假死

    http://www.cnblogs.com/Charltsing/p/publisher.html 最近测试task并发任务的效率与线程池的区别,发现了另外一个问题.task建立任务的速度很快,输出 ...

  9. VO和DO转换(四) MapStruct

    VO和DO转换(一) 工具汇总 VO和DO转换(二) BeanUtils VO和DO转换(三) Dozer VO和DO转换(四) MapStruct MapStruct

  10. window端编码到Linux允许脚本 笔记

    昨天升级一个服务,发现没有现成的启动脚本.就随手写了一个,一运行发现不行.竟然报错说找不到文件,No such file or directory [nohup: cannot run command ...