![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 86
qian_348840260
这个作者很懒,什么都没留下…
展开
-
记一次Safepoint导致长时间STW的踩坑之旅 GC
过 程 记 录现象:小米有一个比较大的公共离线HBase集群,用户很多,每天有大量的MapReduce或Spark离线分析任务在进行访问,同时有很多其他在线集群Replication过来的数据写入,集群因为读写压力较大,且离线分析任务对延迟不敏感,所以其G1GC的MaxGCPauseMillis设置是500ms。但是随着时间的推移,我们发现了一个新的现象,线程的STW时间可以到3秒以上,但是实际GC的STW时间却只有几百毫秒!打印GC日志 -XX:+PrintGC -XX:+Pr转载 2021-11-03 20:16:27 · 1284 阅读 · 0 评论 -
JVM 常用参数及safepoint
JVM系列-常用参数_weixin_30739595的博客-CSDN博客每日一面 - JVM 何时会 Stop the world - 简书1.堆内存堆内存用于存储new对象,垃圾回收器负责堆内存的管理。但Java程序实际占用的空间则由堆内存、栈内存(程序运行栈)、程序计数器、常量区、代码区、本地内存等。堆内存分为Young和Old,Young分为2个Survivor (From Survivor和To Survivor),1个eden,具体见JVM系列-垃圾回收。-Xms??[m|转载 2021-11-03 17:44:12 · 900 阅读 · 0 评论 -
几个系统的gc参数配置,仅作参考
dispatcher-apiJava HotSpot(TM) 64-Bit Server VM (25.101-b13) for linux-amd64 JRE (1.8.0_101-b13), built on Jun 22 2016 02:59:44 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)Memory: 4k page, physical 98586924k(6610476k free), swap 0k(0k free)Co原创 2021-03-25 15:32:10 · 2404 阅读 · 0 评论 -
Synchronized(1) - 偏向锁
Synchronized(1) - 偏向锁在多线程并发编程中,synchronized一直扮演重要的角色,在JAVA SE 1.6版本之前被称为重量级锁。在JAVA SE 1.6中synchronized得到了优化,为了减少锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁。本文重点介绍偏向锁的实现。1 synchronized实现原理与使用利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下三种形式。 对于普通同步方法,锁是当前实例对象转载 2021-03-19 17:25:34 · 396 阅读 · 0 评论 -
jvm误区--动态对象年龄判定
虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。学习jvm的人,基本都阅读过上面这段话,这里讲的是动态年龄的判定。对于动态的判定的条件就是相同年龄所有对象大小的总和大于Survivor空间的一半,然后算出的年龄要和MaxTenuringThreshold的值.转载 2021-03-08 10:34:24 · 202 阅读 · 0 评论 -
PhantomReference 引发的GC问题
一、问题分析围栏系统cms gc时间长,导致其他依赖系统接口报警。 查询gc日志如下:2020-05-08T16:12:11.082+0800: 883881.058: [GC remark 2020-05-08T16:12:11.082+0800: 883881.058: [Finalize Marking, 0.0272172 secs] 2020-05-08T16:12:11.109+0800: 883881.085: [GC ref-proc2020-05-08T16:12:11.109原创 2021-03-02 15:26:17 · 910 阅读 · 0 评论 -
一次JVM GC排查过程及解决方案
背景介绍:dispatcher-queue-consumer主要负责订阅rocketmq的topic,消费消息进行业务逻辑处理。目前一共有14个消费组,其中轨迹类消费组(3组,其他11类消费组tps量级较低)tps峰值高达10000,均值5000,单机 tps约为5000/8.prod环境堆内存为2G,垃圾回收算法组合使用Parallel Scavenge+Parallel Old.统计时段: 所有数据统计均以15-18点为准优化前fgc 1次/24小时,ygc 6-7次/1分钟, ygc平原创 2020-09-02 19:21:27 · 2789 阅读 · 3 评论 -
一次 JVM FullGC 的排查过程及解决方案!(Metadata GC Threshold)
一次 JVM FullGC 的排查过程及解决方案!本文来源:字节观,是二阿公同学的投稿问题产生最近新上线的系统偶尔会报FullGC时间过长(>1s)的告警,查看GC日志,如下图所示:看到GC日志,我第一时间关注到的不是GC耗时,而是GC触发的原因:Metadata GC Threshold也就是 FullGC 触发的原因是因为Metaspace大小达到了GC阈值。在监控系统里面看了一下Metaspace的大小变化趋势,如下图所示:按照以往的经验,Metaspace在系统转载 2020-08-18 19:36:11 · 5718 阅读 · 0 评论 -
JVM之ParNew和CMS日志分析
http://www.importnew.com/30237.html转载 2019-03-20 20:47:06 · 418 阅读 · 0 评论 -
CMS垃圾回收的七个阶段
1.CMS-initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。2.CMS-concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。3.CMS-concurrent-preclean/Rescan (parallel) 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中,从新生代晋升或新分配或被更新的对象。通过并发地重新扫描这些对象,预清理原创 2020-06-04 15:31:33 · 1727 阅读 · 0 评论 -
堆内存超过32G时,为什么压缩指针失效
对象内存布局:对象头中的Class Pointer默认占8个字节,开启-XX:+UseCompressedOops后,为了节省空间压缩为4个字节,4*8=32位表示可寻址4G个对象,在内存空间小于32G时,可以通过编码、解码方式进行优化,使得jvm可以支持更大的内存配置。当堆内存大于32G时,压缩指针参数会失效,会强制使用64位(即8字节)来对java对象寻址。参考:https://www.zhihu.com/question/365436606...原创 2020-06-04 15:30:31 · 2657 阅读 · 1 评论 -
空间分配担保
在进行Minor GC之前,会判断老年代最大连续可用空间是否大于新生代所有对象总空间,如果大于,说明Minor GC是安全的,否则会判断是否允许担保失败,如果允许,判断老年代最大连续可用空间是否大于历次晋升到老年代的对象的平均大小,如果大于,则执行Minor GC,否则执行Full GC。 注意:在jdk1.6 update 24之后-XX:-HandlePromotionFailure 不起作用了,只要老年代的连续空间大于新生代对象的总大小或者历次晋升到老年代的对象的平均大小就进行MonitorGC,否则原创 2020-06-04 15:28:56 · 138 阅读 · 0 评论 -
对象进入老年代的时机
对象内存直接在老年代分配1.分配的对象大小大于eden space或者进行ygc后,eden space剩余空间仍然不足以存放新对象,适合所有收集器2. Parallel Scavenge: 需要分配对象内存大小不小于eden space总空间的一半,并且eden space剩余空间不足分配,直接分配到老年代,不触发Minor GC.3. Serial和ParNew: 使用-XX:PretenureSizeThreshold参数(默认为0直接进年轻代)控制,内存大小超过此字节数的对象直接进入..原创 2020-06-04 15:27:03 · 352 阅读 · 0 评论 -
Java对象内存布局及Object o = new Object()在内存中占用多少字节
对象内存布局图:对象头中 Mark Word占8字节,Class Pointer占4字节(JVM默认开启-XX:+UseCompressedOops选项),new Object不存在属性,因instance data不占字节, JVM保证任意对象在内存中占用的字节数都是8的位数,不足8的位数则使用对齐填充,因此padding占4位, 8+4+0+4=16,因此Object o = new Object()在内存中共占用16个字节。参与链接:https://www.jianshu.c...原创 2020-06-02 11:46:26 · 1079 阅读 · 1 评论 -
PhantomReference导致CMS GC耗时严重
PhantomReference导致CMS GC耗时严重简书 涤生。转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注。介绍GC优化关键是找到优化的点,如果明确GC过程中耗时的阶段在哪里,优化起来应该也就不难了。这篇文章主要讲述最近一次CMS GC优化过程,是一次分享,也是一次总结。闲话少说,我们开始吧。现象Old GC监控信息上图很明显(公司内部监控没有区分Old GC和Full GC)Old GC耗时严重,大致看了几天的监控,基本上每次都很耗时,时间约1转载 2020-05-11 23:58:15 · 542 阅读 · 3 评论 -
JMX监控HikariDataSource数据源
先来看下HikariDataSource是怎么往PlatformMBeanServer中注入PlatformMBeanServer的1.定义了一个满足规范的MXBean接口public interface HikariPoolMXBean { int getIdleConnections(); int getActiveConnections(); int get...原创 2020-04-26 14:17:32 · 1865 阅读 · 0 评论 -
关于虚拟机中cpu“cores"个数的问题
https://blog.csdn.net/ketonfly/article/details/12949823在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢?经过查看,我的开发机器是1个物理CPU,4核8线程,Intel(R) Core(TM) i7 CPU 860 @...转载 2020-04-11 12:00:21 · 4542 阅读 · 0 评论 -
使用btrace排查线上内容泄露事故
这是个比较典型的java内存使用问题,定位过程也比较直接,但对新人还是有点参考价值的,所以就纪录了一下。下面介绍一下在不了解系统代码的情况下,如何一步步分析和定位到具体代码的排查过程(以便新人参考和自己回顾)初步的现象业务系统消费MQ中消息速度变慢,积压了200多万条消息,通过jstat观察到业务系统fullgc比较频繁,到最后干脆OOM了:进一步分析既然知道了内存使用存...转载 2020-04-07 16:24:59 · 306 阅读 · 0 评论 -
gc日志相关参数
引言本文根据实践经验分别介绍了jvm日常日志打印、排查问题时的日志打印,从做好最简单的事情开始培养一定jvm问题的解决能力。著作权归作者所有,转载请注明出处常见参数 指定gc日志文件位置 -Xloggc:'gc.log' //指定gc日志文件位置,默认输出到终端 gc日志模式 一般只要开启gc日志打印,都会默认开启简单日志模式,生产...转载 2019-11-01 10:19:34 · 457 阅读 · 0 评论 -
G1学习整理
https://blog.csdn.net/u013380694/article/details/83341913整个年轻代内存会在初始空间-XX:G1NewSizePercent(默认整堆5%)与最大空间-XX:G1MaxNewSizePercent(默认60%)之间动态变化,且由参数目标暂停时间-XX:MaxGCPauseMillis(默认200ms)、需要扩缩容的大小以及分区的已记...原创 2019-03-28 18:19:19 · 378 阅读 · 0 评论 -
stop the world 安全点
查看停顿–安全点停顿日志要查看安全点停顿,可以打开安全点日志,通过设置JVM参数 -XX:+PrintGCApplicationStoppedTime 会打出系统停止的时间,添加-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 这两个参数会打印出详细信息,可以查看到使用偏向锁导致的停顿,时间非常短暂,但是争用严重...转载 2019-04-09 20:09:37 · 434 阅读 · 0 评论 -
JDK8 的FullGC 之 metaspace
前言:由于最近写的程序在运行一段时间后出现高cpu,然后不可用故进而进行排查,最终定位到由于metaspace引起fullgc,不断的fullgc又占用大量cpu导致程序最终不可用。下面就是这次过程的分析排查和总结,便于以后温故,同时也希望能给遇到同样问题的同学一些参考。PS:如果有使用dubbo的同学,这里推荐一个dubbo-postman工具:dubbo-postman一 jvm的内...转载 2019-09-25 15:01:30 · 620 阅读 · 0 评论 -
GC日志详解
JVM实用参数(八)GC日志原文地址:https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/作者:PATRICK PESCHLOW,译者:Greenster 校对:梁海舰本系列的最后一部分是有关垃圾收集(GC)日志的JVM参数。GC日志是一个很重要的工具,它准确记录了每一次的G转载 2015-10-14 16:55:55 · 2704 阅读 · 0 评论 -
Java内存泄露 JVM监控工具介绍jstack jconsole jinfo jmap jdb jstat
转载地址:http://wenku.baidu.com/link?url=WEKQAS7gBnW2l3GqMcMMG8hloMheE0xC4UhoQw-hozzH-ngVmy7St2eE7o4NE-bZvsskNqwbFYLgED2G69pNg9EHg0ylFd_1UjC1BFRqKJi转载 2014-02-25 14:20:30 · 841 阅读 · 0 评论 -
虚拟机参数示例
/usr/local/java//bin/java -Djava.util.logging.config.file=/u01/tomcat_docker_8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms4g -Xmx4g -Xmn2g...原创 2019-03-28 11:07:26 · 220 阅读 · 0 评论 -
JVM的Stop The World,安全点,黑暗的地底世界
一、什么是安全点GC时的Stop the World(STW)是大家最大的敌人。但可能很多人没留意,除了GC,JVM底下还会发生这样那样的停顿。JVM里有一条特殊的线程--VM Thread,专门用来执行一些特殊的VM Operation,比如thread dump等,这些任务,都需要整个Heap,以及所有线程的状态是静止的、一致的才能进行。所以JVM引入了安全点(Safe Poin...转载 2019-03-26 14:23:26 · 1642 阅读 · 0 评论 -
jps & jstack & jmap & jstat
https://blog.csdn.net/u013310517/article/details/80990924转载 2019-03-22 11:51:45 · 205 阅读 · 0 评论 -
Linux与JVM的内存关系分析
http://tech.meituan.com/linux-jvm-memory.html引言在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内转载 2014-12-03 19:46:00 · 502 阅读 · 0 评论 -
jstack简介
jstat 1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 2.jstat -gccapacity pid转载 2014-11-04 17:56:35 · 596 阅读 · 0 评论 -
Java GC 日志详解
Java GC日志可以通过 +PrintGCDetails开启以ParallelGC为例YoungGC日志解释如下(图片源地址:这里) :FullGC(图片源地址:这里):一目了然,一图胜千言转载 2014-08-29 16:53:58 · 607 阅读 · 0 评论 -
使用jstack分析cpu消耗过高的问题
我们使用jdk自带的jstack来分析。当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2 18 0 1817m 776m 9712 S 3.3 4.9 12:03.24 java转载 2014-06-03 11:48:59 · 913 阅读 · 0 评论 -
Java内存泄露监控工具:JVM监控工具介绍及分析
http://developer.51cto.com/art/201203/321461.htm转载 2013-01-10 11:10:26 · 430 阅读 · 0 评论 -
虚拟机stack全解析
通过jps -lv 获取到本地的一个JVM实例进程。再通过jstack pid > thread.txt ,把stack trace输出到thread.txt文件中。 Java代码 2012-08-28 23:16:39 Full thread dump OpenJDK Client VM (19.0-b09 mixed mode, shari转载 2013-01-10 16:07:43 · 837 阅读 · 0 评论 -
VisualVM监控虚拟机信息
对于使用命令行远程监控jvm太麻烦?那可以试试sun提供的VisualVM,jdk1.6自带了,可以到bin目录下找到它。 什么也不说了,直接运行此exe,打开界面如下: (图1) (上图1左边的数可以看到,VisualVM分为3类,Local它会自动侦测到,并显示出来) 双击Local下的任一节点,看到右边的变化(转载 2013-01-10 10:53:50 · 532 阅读 · 0 评论 -
Java内存模型及GC原理
转载来源:http://blog.sina.com.cn/s/blog_4e90b3ba0100m5cb.htmljava内存模型sun官方网站:sunjava 虚拟机模型JVM内存模型中分两大块,一块是 NEW Generation,另一块是Old Generation. 在NewGeneration中,有一个叫Eden的空间,主要是用来存转载 2012-12-13 11:09:31 · 460 阅读 · 0 评论 -
JAVA线程dump的分析 --- jstack pid
转载来源:http://www.blogjava.net/jzone/articles/303979.htmlJava 的线程线程是指能独立于程序的其它部分运行的执行单元。 JAVA语言能够很好的实现多线程的程序。我们在调试程序,或者在开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态,正在执行的操作,从而分析系统可能存在的问题。在阅读本文之间,应对转载 2012-12-12 11:18:43 · 1216 阅读 · 0 评论 -
XX性能优化指标
在线上选了8台机器(核心池、非核心池、用户关系池、外网分别在XXYY各一台),部署了jvm监控的 agent之后,通过对数据的分析,得出了这8个ip的健康状况。其中最好的是 的ip。最差的是 。当时 上的ip的监控项报表如下(共15个健康判断项,评判项的健康情况可能随着时间变化而变化)。这里对每一个 健康评判项,如果在黄色预警值之下,那么健康结果是绿色;如果在黄色预警值和红色预警值之间,那转载 2014-12-10 18:02:44 · 979 阅读 · 0 评论 -
Java中的垃圾回收原理
http://my.oschina.net/LovingIT/blog/268549Java中的垃圾回收原理分类: java目录(?)[+]垃圾回收简介用户程序(mutator)会修改还堆区中的对象集合,从存储管理器处获取空间,创建对象,还可一引入和消除对已有对象的引用。当mutator不能“达到”某些转载 2014-12-29 20:24:17 · 492 阅读 · 0 评论 -
查找最耗时最费CPU的那个线程
1. ps -ef|grep java 查进程IDroot 8514 1 0 Mar04 ? 01:37:59 /usr/java/bin/java -Djava.util.logging.config.file=/data1/weibo_coral/conf/logging.properties -Djava.util.logging.manager=原创 2015-03-13 17:49:47 · 2679 阅读 · 0 评论 -
Java Safepoint 与Stop The World
原文首发于知乎https://www.zhihu.com/question/57722838https://blog.csdn.net/u011918260/article/details/70047159转载 2020-05-15 15:32:26 · 108 阅读 · 0 评论