- 浏览: 7944919 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
http://www.taobaotest.com/blogs/2294
在性能测试过程中,FULL GC频繁是比较常见的问题,FULL GC 产生的原因有很多,这里主要针对meta压测过程中分析FULL GC问题的一些思路进行分享,供大家参考
1.如何发现是否发生FULL GC和FULL GC是否频繁
使用JDK自带的轻量级小工具jstat
语法结构:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
比如 /opt/taobao/java/bin/jstat –gcutil pid 5000
输出结果:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 90.63 100.00 58.82 3.51 183 2.059 0 0.000 2.059
0.00 15.48 7.80 60.99 3.51 185 2.092 1 0.305 2.397
0.00 15.48 18.10 47.90 3.51 185 2.092 2 0.348 2.440
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
通过FGC我们可以发现系统是否发生FULL GC和FULL GC的频率
2. FULL GC分析和问题定位
a. GC log收集和分析
(1)在JVM启动参数增加:"-verbose:gc -Xloggc:<file_name> -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
PrintGCTimeStamp只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间
(2)如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial mark与final re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial mark与final re-mark各一次
b. Dump JVM 内存快照
/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid
这里有一个问题是什么时候进行dump?
一种方法是前面提到的用jstat工具观察,当OLD区到达比较高的比例如60%,一般会很快触发一次FULL GC,可以进行一次DUMP,在FULL GC发生以后再DUMP一次,这样比较就可以发现到底是哪些对象导致不停的FULL GC
另外一种方法是通过配置JVM参数
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分别用于指定在full GC之前与之后生成heap dump
c. 利用MAT((Memory Analyzer Tool)工具分析dump文件
关于MAT具体使用方法网上有很多介绍,这里不做详细展开,这里需要注意的是:
(1) MAT缺省只分析reachable的对象,unreachable的对象(将被收集掉的对象)被忽略,而分析FULL GC频繁原因时unreachable object也应该同时被重点关注。如果要显示unreachable的对象细节必须用mat 1.1以上版本并且打开选项“keep unreachable object”
(2) 通常dump文件会好几个G,无法在windows上直接进行分析,我们可以先把dump文件在linux上进行分析,再把分析好的文件拷贝到windows上,在windows上用MAT打开分析文件。
在性能测试过程中,FULL GC频繁是比较常见的问题,FULL GC 产生的原因有很多,这里主要针对meta压测过程中分析FULL GC问题的一些思路进行分享,供大家参考
1.如何发现是否发生FULL GC和FULL GC是否频繁
使用JDK自带的轻量级小工具jstat
语法结构:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
比如 /opt/taobao/java/bin/jstat –gcutil pid 5000
输出结果:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 90.63 100.00 58.82 3.51 183 2.059 0 0.000 2.059
0.00 15.48 7.80 60.99 3.51 185 2.092 1 0.305 2.397
0.00 15.48 18.10 47.90 3.51 185 2.092 2 0.348 2.440
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
通过FGC我们可以发现系统是否发生FULL GC和FULL GC的频率
2. FULL GC分析和问题定位
a. GC log收集和分析
(1)在JVM启动参数增加:"-verbose:gc -Xloggc:<file_name> -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
PrintGCTimeStamp只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间
(2)如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial mark与final re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial mark与final re-mark各一次
b. Dump JVM 内存快照
/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid
这里有一个问题是什么时候进行dump?
一种方法是前面提到的用jstat工具观察,当OLD区到达比较高的比例如60%,一般会很快触发一次FULL GC,可以进行一次DUMP,在FULL GC发生以后再DUMP一次,这样比较就可以发现到底是哪些对象导致不停的FULL GC
另外一种方法是通过配置JVM参数
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分别用于指定在full GC之前与之后生成heap dump
c. 利用MAT((Memory Analyzer Tool)工具分析dump文件
关于MAT具体使用方法网上有很多介绍,这里不做详细展开,这里需要注意的是:
(1) MAT缺省只分析reachable的对象,unreachable的对象(将被收集掉的对象)被忽略,而分析FULL GC频繁原因时unreachable object也应该同时被重点关注。如果要显示unreachable的对象细节必须用mat 1.1以上版本并且打开选项“keep unreachable object”
(2) 通常dump文件会好几个G,无法在windows上直接进行分析,我们可以先把dump文件在linux上进行分析,再把分析好的文件拷贝到windows上,在windows上用MAT打开分析文件。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1580方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2020前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3474info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2237import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 491https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 692public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 612https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 672https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 439https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5451 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3102微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 619https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1845什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 968本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1364原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 864public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 675在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 942-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 773一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1908介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
在本篇文章中,我们将分享一个 Full GC 问题排查过程,通过示例代码和实际操作,介绍了如何快速定位 Full GC 问题的原因和解决方案。 问题描述 在我们的服务中,突然出现了频繁的 Full GC 问题,而服务本身没有...
5. **垃圾收集器效率评估**:通过对GC日志的深入分析,GChisto可以帮助评估垃圾收集器的效率,如果发现存在频繁的Full GC或者内存泄漏,可以据此调整垃圾收集策略。 使用GChisto时,你需要首先获取应用程序的GC日志...
垃圾回收机制可以分为两种:部分收集(Partial GC)和整堆收集(Full GC)。部分收集可以进一步分为新生代收集(Minor GC)和老年代收集(Major GC)。混合收集(Mixed GC)是对整个新生代和部分老年代进行垃圾回收...
- **减少大对象的创建**:大对象直接进入老年代,过多的大对象可能导致频繁的Full GC。 - **合理使用集合**:避免过度增长的集合,及时清理不再使用的元素。 - **关注长生命周期对象**:如果某些对象生命周期过长...
由于无法直接访问,我们可以假设博主可能讨论了JVM内存的分配策略、垃圾收集算法(如Minor GC、Major GC、Full GC)、内存泄漏检测以及如何通过工具(如VisualVM、JProfiler)进行内存分析和性能调优。 标签 "源码...
在Java 8之前,区分新生代(Minor GC/Young GC)、老年代(Major GC/Old GC)和全堆(Full GC)的收集。Java 8后引入了混合收集(Mixed GC),更智能地处理不同区域的垃圾回收。 ### 垃圾回收算法 1. **标记-清除*...
通过分析这些日志,开发者可以识别出可能导致性能下降的问题,如频繁的Full GC,进而调整堆内存大小或使用其他内存管理策略。 总的来说,JAVA性能调优是一个涉及到多个层面的复杂过程,包括代码优化、内存管理和...
8. **Minor GC与Full GC**: - **Minor GC(YGC)**:发生在新生代,当Eden区满时触发。 - **Full GC**:发生在老年代,当堆内存不足或系统要求时触发。 9. **内存调试工具**: - **jmap**:查看堆内存详细信息...
文章分享了多个调优模式与案例,旨在降低FGC(Full Garbage Collection)频率、减少FGC造成的暂停时间、降低YGC(Young Generation Garbage Collection)频率以及缩短YGC造成的暂停时间。通过调整如...
-XX:+HeapDumpBeforeFullGC可以在FullGC之前导出堆转储文件;-XX:+PrintFlagsFinal可以打印JVM的参数设置。 第三方工具方面,MAT(Memory Analyzer Tool)是一个强大的分析堆转储文件的工具,它可以用来分析内存...
八、Minor GC 与 Full GC * Minor GC:新生代内存不够用时候发生,也叫 YGC。 * Full GC:JVM 内存不够的时候发生。 九、内存调试工具 * jmap:查看内存。 * jstack:可以看当前栈的情况。 * jconsole:用于监控 ...
文件“histo_53.log”可能是内存分析过程中的一个历史记录,包含了对象的分布和数量信息,这在分析内存使用情况时非常有用。在实际操作中,我们需要将其导入到内存分析工具中,以获取更详细的内存占用情况和可能的...
此外,面试者还被问及如何在线上环境中分析GC问题以及JVM的调优方法,包括1.7和1.8版本中JVM内存结构的区别,以及Full GC是否会回收Metaspace空间内存。 数据库方面,面试者遇到了关于锁等待和分布式事务的问题。...
21. **Java内存溢出错误分析**:如何分析和处理常见的内存溢出错误,如Full GC频繁、Old Gen空间不足等。 了解和掌握这些JVM相关知识点对于成为一名优秀的Java开发者至关重要,它们能帮助我们编写更高效、更稳定的...
- **GC Log**: 用于记录垃圾回收的日志信息,通过分析这些日志可以帮助我们理解GC的行为模式及其效率。 - **jstat**: 提供了实时的JVM统计信息,包括堆内存使用情况、GC活动等。 - **jmap**: 用于获取堆内存的快照,...
2. **分析过程**: - 使用JConsole或VisualVM等工具收集系统运行时的信息,包括CPU使用率、内存使用情况等。 - 分析堆内存快照,找出占用内存较大的对象及其类型。 - 考虑是否可以通过调整GC策略、增加堆内存等...
在描述中提到了一个博客链接,虽然具体内容没有提供,但可以推测博主可能分享了关于JVM崩溃的案例分析或解决方案。通常,遇到JVM崩溃时,开发者会查看错误日志来定位问题。在给定的文件名"hs_err_pid26290.log"中,...
- CMS(并发标记清除)回收器主要分为初始标记、并发标记、重新标记和并发清除几个阶段,整个过程中可能会有停顿,且 CMS 会产生内存碎片,如果大量碎片化会导致频繁的 Full GC。 4. **快速排序**: - 快速排序是...
- **垃圾回收问题**:优化JVM的垃圾回收策略,合理设置GC参数,减少Full GC的发生频率。 - **线程死锁**:使用`ThreadMXBean`接口检测线程状态,避免线程间的死锁发生。 - **资源竞争**:优化同步机制,尽可能减少...