jvm gc停顿_在JVM中记录世界停顿

jvm gc停顿

金属保险柜 不同的事件可能导致JVM暂停所有应用程序线程。 这种暂停称为世界停止(STW)暂停。 触发STW暂停的最常见原因是垃圾回收( 例如github中的示例 ),但是不同的JIT操作( 示例 ),偏向锁吊销( 示例 ),某些JVMTI操作以及更多其他 操作也需要停止应用程序。

可以安全停止应用程序线程的点称为“意外点”。 此术语也经常用于指代所有STW暂停。

启用GC日志或多或少是常见的。 但是,这不会捕获所有安全点上的信息。 要获得全部信息,请使用以下JVM选项:

-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime

如果您想知道显式引用GC的命名,请不要惊慌-启用这些选项会记录所有安全点,而不仅仅是垃圾收集暂停。 如果您运行下面的示例( github中的源代码),并带有上面指定的标志

public class FullGc {private static final Collection<Object> leak = new ArrayList<>();private static volatile Object sink;public static void main(String[] args) {while (true) {try {leak.add(new byte[1024 * 1024]);sink = new byte[1024 * 1024];} catch (OutOfMemoryError e) {leak.clear();}}}
}

您应该在标准输出中看到类似于以下内容的条目:

Application time: 0.3440086 seconds
Total time for which application threads were stopped: 0.0620105 seconds
Application time: 0.2100691 seconds
Total time for which application threads were stopped: 0.0890223 seconds

读取起来很容易(尤其是与GC日志进行比较)–从上面您可以看到应用程序在前344毫秒内成功完成了有用的工作,将所有线程暂停了62毫秒,接着是210毫秒的有用工作和89毫秒的暂停。

您可以将这些标志与GC标志结合使用,例如,当再次运行同一程序并添加-XX:+ PrintGCDetails时 ,输出将类似于以下内容:

[Full GC (Ergonomics) [PSYoungGen: 1375253K->0K(1387008K)] [ParOldGen: 2796146K->2049K(1784832K)] 4171400K->2049K(3171840K), [Metaspace: 3134K->3134K(1056768K)], 0.0571841 secs] [Times: user=0.02 sys=0.04, real=0.06 secs] 
Total time for which application threads were stopped: 0.0572646 seconds, Stopping threads took: 0.0000088 seconds

基于以上内容,我们看到应用程序线程被迫停止57毫秒以进行垃圾回收。 等待所有应用程序线程到达安全点所花的时间为8微秒。 但是,如果我们再举一个示例( github中的源代码 )并使用相同的选项运行它,我们可能会看到以下输出:

Total time for which application threads were stopped: 0.0001273 seconds, Stopping threads took: 0.0000196 seconds
Total time for which application threads were stopped: 0.0000648 seconds, Stopping threads took: 0.0000174 seconds

由此,我们实际上无法推断出导致暂停的原因,因为没有垃圾收集活动。 如果您想更详细地了解其他安全点,那么这里有几个JVM参数供您选择:

-XX:+PrintSafepointStatistics  -XX:PrintSafepointStatisticsCount=1

启用它们会使JVM将其他信息记录到标准输出中,类似于以下内容:

5.141: RevokeBias                       [      13          0              2    ]      [     0     0     0     0     0    ]  0  
Total time for which application threads were stopped: 0.0000782 seconds, Stopping threads took: 0.0000269 seconds

根据以下顺序显示有关安全点的信息:

  • 自JVM启动以来的时间戳(以毫秒为单位)(上例中为5.141)
  • 触发暂停的操作的名称( RevokeBias )。
    • 如果看到“无虚拟机操作”,则意味着这是所谓的“保证安全点”。
  • 在安全点停止的线程数(13)
  • 在安全点开始时运行的线程数(0)
  • vm操作开始执行时被阻塞的线程数(2)
  • 到达安全点和执行操作的各个阶段的时间(全零)

因此,现在我们看到,使用偏向锁可能会导致许多STW暂停发生,即使它们仅花费数十微秒的时间。 在大量平行的日子里立即禁用它们并不罕见。

总而言之,通过随时记录这些数据,您确实可以为自己省去一些麻烦。 为此,请指定以下JVM选项:

-XX:+LogVMOutput -XX:LogFile=vm.log

并且所有JVM的输出都将存储到vm.log文件中。 但是,基于这些日志进行解释和执行是一个非常广泛的话题,不在本文的讨论范围之内,但是将来我可能会写一两篇有关它的文章,因此,如有兴趣,请随时关注–通过我们的Twitter订阅或通过RSS feed 。

如果您想立即内容,请阅读Nitsan Wakart的精彩博客文章 :当然还有OpenJDK源代码 。

翻译自: https://www.javacodegeeks.com/2015/04/logging-stop-the-world-pauses-in-jvm.html

jvm gc停顿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

-在c语言中什么含义

点击上方蓝字关注我&#xff0c;了解更多咨询->是一个整体&#xff0c;它是用于指向结构体。1.换种说法&#xff0c;如果我们在C语言中定义了一个结构体&#xff0c;然后申明一个指针指向这个结构体&#xff0c;那么我们要用指针取出结构体中的数据&#xff0c;就要用到“-&…

idea如何连接本地mysql_IDEA如何连接MYSQL

IDEA如何连接MYSQL1>下载JDBC2>导入数据库驱动在IDEA中新建一个lib目录复制下载的驱动包&#xff0c;然后粘贴到刚刚建立的lib目录下右键点击添加的数据库驱动&#xff0c;找到最下面的Add as Library...&#xff0c;点击它会出现一个弹窗&#xff0c;点击"OK"…

apache camel_Apache Camel日志组件示例

apache camelApache Camel日志组件示例 您要将消息记录到底层的记录机制中&#xff0c;请使用骆驼的log:组件。 Camel使用sfl4j作为记录器API&#xff0c;然后允许您配置记录器实现。 在本文中&#xff0c;我们将使用Log4j作为实际的记录器机制。 让我们从我们的例子开始。 依…

putchar在c语言中怎么用

点击上方蓝字关注我&#xff0c;了解更多咨询putchar在c语言中的作用是向终端输出一个字符&#xff0c;也属于一种C库函数&#xff0c;包含在C标准库中&#xff0c;putchar是一个字符输出&#xff0c;用于快写的时候很方便。首先来看一下c语言的含义&#xff0c;c语言是一门面向…

mysql设计体会_数据库设计心得体会

组名&#xff1a;NoobStruggle。成员&#xff1a;刘海天、胡亮、谭晓杰、宁君辉。一&#xff0e;分析需求对于每一个项目&#xff0c;数据库的设计都是至关重要的&#xff0c;它关系到后端进行接口开发时实现的难度&#xff0c;数据库中数据的可维护性&#xff0c;一致性&#…

hibernate查询缓存_Hibernate查询缓存如何工作

hibernate查询缓存介绍 现在&#xff0c;我已经介绍了实体和集合缓存&#xff0c;现在该研究查询缓存的工作原理了。 查询缓存与实体严格相关&#xff0c;它在搜索条件和满足该特定查询过滤器的实体之间绘制关联。 像其他Hibernate功能一样&#xff0c;查询缓存也不像人们想象…

windows mysql kip grant tables_数据库mysql数据库mysql: [ERROR] unknown option '--skip-grant-tables'...

mysql数据库报ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO)看到网上说要配置my.ini我的是win10系统&#xff0c;用的是mysql-5.7.18-winx64mysql文件里没有my.ini&#xff0c;在网上看到可以自己建&#xff0c;就家加了一个内容如下&#x…

教你快速了解C语言基本结构

点击上方蓝字关注我&#xff0c;了解更多咨询在步入C语言程序世界之前&#xff0c;不要对C语言产生恐惧感&#xff0c;觉得这种语言应该是学者或研究人员的专利。C语言是人类共有的财富&#xff0c;是普通人只要通过努力学习就可以掌握的知识。下面通过一个简单的程序来看一看C…

hpcc_使用Java将数据流式传输到HPCC

hpcc高性能计算集群&#xff08;HPCC&#xff09;是类似于Hadoop的分布式处理框架&#xff0c;除了它运行以自己的称为企业控制语言&#xff08;ECL&#xff09;的特定领域语言&#xff08;DSL&#xff09;编写的程序外。 ECL很棒&#xff0c;但是偶尔您会想用其他语言来执行繁…

提高mysql insert速度_让你的insert操作速度增加1000倍的方法

大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条insert将会是非常慢的,那么我们如何让我们的inser更快呢。很多时候方法选对了对于我们做事将会是事半功倍。大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条inse…

C语言中同名变量,作用域怎么确定?

点击上方蓝字关注我&#xff0c;了解更多咨询C中通常会声明很多变量&#xff0c;变量有不同的作用域。如果出现同名变量&#xff0c;作用域怎么确定&#xff1f;这里先看结论&#xff1a;块中的变量作用域不同&#xff0c;内层块会隐藏外层块中的定义。但离开内层块后&#xff…

jdk 1.8 jdk8_JDK 8 SummaryStatistics类

jdk 1.8 jdk8JDK 8中引入的三个新类是java.util包的DoubleSummaryStatistics &#xff0c; IntSummaryStatistics和LongSummaryStatistics 。 这些类使计算元素总数&#xff0c;元素的最小值&#xff0c;元素的最大值&#xff0c;元素的平均值以及双精度&#xff0c;整数或long…

mysql哪些xss要转译查询_转义字符的妙用不用引号的字符注入和XSS脚本安全 -电脑资料...

声明&#xff1a;本文纯属YY,如有扯淡之处&#xff0c;请告诉小菜俺 THX在字符型填字游戏中&#xff0c;和&#xff02;往往是决定能否跳出约束进行攻击的关键&#xff0c;于是出现鸟转义字符 \&#xff0c;可以把 &#xff02;变成残废....这恰恰帮助我们改变了字符内部结构…

C语言基础知识干货收藏

点击上方蓝字关注我&#xff0c;了解更多咨询算法结构&#xff1a;一、顺序结构、选择结构、循环结构&#xff1b;二、循环结构又分为while型、until型、for循环结构&#xff1b;程序流程图&#xff1b;结构化程序设计方法&#xff1a;&#xff08;1&#xff09;自顶向下&#…

hazelcast入门教程_Hazelcast入门指南第7部分

hazelcast入门教程这是解释如何使用Hazelcast的系列文章的续篇。 如果一个人没有阅读其他六个帖子&#xff0c;请转到目录并阅读其他帖子。 不同的地图种类 Hazelcast的MultiMap打破了以前使用java.util.Collection接口的常规方式。 实际上&#xff0c;我认为MultiMap的概念完…

python xlrd读取文件报错_python中xlrd库如何实现文件读取?

俗话说得好&#xff0c;技多不压身&#xff0c;虽然我们已经掌握了多种可以实现读取文件的方式&#xff0c;但是丝毫不影响我们要学会精益求精&#xff0c;他说学习文件读取的奥秘&#xff0c;况且&#xff0c;数据分析是十分重要的&#xff0c;一切的代码运行&#xff0c;总归…

c语言 %x,%d,%c,%s,%x各代表什么

点击上方蓝字关注我&#xff0c;了解更多咨询转换说明符%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G) 浮点数不显无意义的零”0″%i 有符号十进制整数(与%d相同)%u 无符号…

apache mesos_Apache Mesos + Marathon和Java EE

apache mesosApache Mesos是一个开放源代码群集管理器&#xff0c;可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机&#xff08;物理或虚拟&#xff09;中提取CPU&#xff0c;内存&#xff0c;存储和其他计算资源&#xff0c;从而使容错和弹性的…

C语言表达式用法快来看看

点击上方蓝字关注我&#xff0c;了解更多咨询表达式是C语言的主体。在C语言中&#xff0c;表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式所含操作符的个数&#xff0c;可以把表达式分为简单表达式和复杂表达式两种&#xff0c;简单表达式是只含…

虚拟机间延迟测量_简单的类来测量延迟

虚拟机间延迟测量这是我编写的用于测量延迟的非常简单的类。 HDRHistogram不是劳斯莱斯解决方案&#xff0c;但是如果您只想在项目中添加一个类&#xff0c;那么效果就很好。 这是一个简单的测试程序&#xff0c;向您展示其用法&#xff1a; package util;public class Laten…