首页
推荐
在线工具
今日运势
Search
1
数据同步工具DataX、Sqoop和Canal
981 阅读
2
Hadoop各版本汇总
953 阅读
3
Spark学习笔记
946 阅读
4
计算机网络笔记
856 阅读
5
“锁”相关总结
842 阅读
BigData
Flink
AI
Backend
Java
Note
OPS
游客
Search
标签搜索
大数据
Flink
离线
实时
JVM
Redis
OpenJDK
Java
笔记
Elasticsearch
Hadoop
Hudi
Flink CDC
K8S
数据湖
AI
WD1016
累计撰写
56
篇文章
累计阅读
12.4万
次
首页
栏目
BigData
Flink
AI
Backend
Java
Note
OPS
页面
推荐
在线工具
今日运势
搜索到
2
篇与
JVM
的结果
返回首页
2020-01-11
JVM垃圾收集行为分析方法
尽管某些监控工具,如:jvisualvm,可以实时提供垃圾收集图表和指标,但它们并没有提供GC行为完整的详细信息,GC日志是研究垃圾收集行为的最佳信息来源。启用GC日志 可以通过指定以下JVM参数来启用GC日志:Java 8及以下版本-XX:+PrintGCDetails -Xloggc:<gc-log-file-path> Example: -XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.logJava 9及以上版本-Xlog:gc*:file=<gc-log-file-path> Example: -Xlog:gc*:file=/opt/tmp/myapp-gc.log注意事项 一般需要观察24小时的GC日志,这样就会同时看到高流量和低流量的情况。 建议从生产环境中收集GC日志,因为垃圾收集行为受流量模式的影响很大,在测试环境中很难模拟生产流量。我们进行2次测试:基线测试——使用JMeter工具在没有启用垃圾收集GC日志的情况下运行应用程序20分钟,同时有200个并发用户。GC日志启用测试——使用相同的JMeter脚本运行应用程序并启用垃圾收集GC日志,持续时间为20分钟,同时有200个并发用户。对比结果如下:如图所示,CPU和内存消耗没有明显差异,同样,平均响应和事务吞吐量也没有明显差异,通过实验可以看出,GC日志在生产服务器中增加的开销可以忽略不计。分析工具 捕获GC日志后,可以使用以下免费工具之一来分析GC日志:1.GCeasy 2.IBM GC & Memory visualizer 3.HP Jmeter4.Garbage Cat
2020年01月11日
737 阅读
13 点赞
2019-01-06
JAVA垃圾回收
垃圾回收算法 标记-清除算法 :产生不连续的内存碎片,为较大对象分配内存时无法找到足够连续的内存,不得不提前触发垃圾收集动作。CMS垃圾回收器。标记-整理算法 :存活的对象向一端移动,存活率高时,效率远高于复制算法。G1、ParallelGC(Paraller Old)。复制算法 :Eden、s0、s1,比例是8:1:1,10%被浪费,JDK8,ParallelGC(Parallel Scavenge)。分代收集算法 。{lamp/}垃圾回收器 CMS收集器 :发标记、并发清除、内存碎片、最短回收停顿时间为目标,与用户线程可以并发执行,牺牲一定的吞吐量;可开启内存碎片整理,会停顿用户线程。ParallelGC :(JDK8)新生代(Parallel Scavenge复制算法),老年代(Paraller Old标记整理算法)。G1垃圾收集器 :吞吐量高,可预测的停顿;整体基于标记-整理算法,从局部(两个Region)是基于复制算法;设置了新生代大小相当于放弃了G1为我们做的自动调优。G1官方的建议——实时数据占用了超过半数的堆空间;对象分配率或“晋升”的速度变化明显;期望消除耗时较长的GC或停顿(超过0.5——1秒)。ZGC :着色指针(在对象的引用上标注了对象的信息),读屏障(把指针更新为有效地址再返回,也就是,永远只有单个对象读取时有概率被减速),Stop-The-World 只会在根对象扫描阶段发生,所以GC暂停时间并不会随着堆和存活对象的数量而增加。TB 级别的堆内存管理;最大 GC Pause 不高于 10ms;最大的吞吐率(Throughput)损耗不高于 15%。ParallelGC 吞吐量优先,后台运算而不需要太多交互的任务。CMS 响应速度优先,集中在互联网站或B/S系统服务端上的Java应用。G1 响应速度优先,面向服务端应用,将来替换CMS。{lamp/}内存划分为 JVM内存划分为堆内存和非堆内存,堆内存分为年轻代、老年代,非堆内存就一个永久代。在JDK1.8版本废弃了永久代,替代的是元空间(MetaSpace),元空间与永久代上类似,都是方法区的实现,他们最大区别是元空间并不在JVM中,而是使用本地内存。{lamp/}Full GC条件 a.发生minor gc之前会判断老年代最大可用连续空间是否大于新生代的所有对象总空间,如果大于直接发生minor gc,如果小于发生full gc。b.老年代空间不足时,创建一个大对象时Ended放不下,会直接保存到老年代中,如果老年代空间不足,就会触发full gc。c.显示调用System.gc()方法,可能会发生full gc。{lamp/}引用类型 强引用 :永远不会回收软引用SoftReference :内存不足时才会回收该对象。比如网页缓存、图片缓存等。弱引用WeakReference :每次垃圾回收。虚引用PhantomReference :虚引用必须和引用队列 (ReferenceQueue)联合使用,主要用来跟踪对象被垃圾回收器回收的活动。假如有一个应用需要读取大量的本地图片,如果每次读取图片都从硬盘读取,则会严重影响性能,但是如果全部加载到内存当中,又有可能造成内存溢出,此时使用软引用可以解决这个问题。
2019年01月06日
1,100 阅读
21 点赞