hotspot jvm_在Hotspot JVM中跟踪过多的垃圾收集

hotspot jvm

由于内存泄漏或其他内存问题,经常导致应用程序冻结,仅使垃圾收集器(GC)进程运行失败,试图释放一些空间。 直到看门狗(或沮丧的管理员)重新启动应用程序并且问题从未解决之前,这种情况一直发生。
本文的目的是展示如何识别过多的GC并在发生堆转储时获取堆转储。 假定Hotspot JVM 1.6或更高版本。
相关的JVM标志
使用以下标志,我们可以指示Hotspot JVM在应用程序变为GC驱动时引发堆转储。
首先,应添加-XX:+ HeapDumpOnOutOfMemoryError标志。
我们的目标是在由于不停止GC而导致应用程序吞吐量下降时生成OutOfMemory错误。 有两个JVM标志将有帮助:
  • -XX: GCTimeLimit = 98 –定义抛出OutOfMemory错误之前在GC中花费的时间比例的限制
  • -XX: GCHeapFreeLimit = 2 –定义完整GC之后抛出OutOfMemoryError之前的最小可用空间百分比
默认情况下,两个标志都是启用的,但是内存不足错误不会经常触发。 因此,需要更深入的了解才能确定每个标志何时有用以及默认值是什么。
Oracle文档
 
过多的GC时间和OutOfMemoryError。
如果在垃圾回收上花费了太多时间,则并发收集器将抛出OutOfMemoryError:如果在垃圾回收上花费了总时间的98%以上,而回收的堆少于2%,则将抛出OutOfMemoryError。 此功能旨在防止应用程序长时间运行,而由于堆太小而几乎没有进展,甚至没有进展。 如有必要,可以通过在命令行中添加选项-XX:-UseGCOverheadLimit来禁用此功能。
该策略与并行收集器中的策略相同,除了执行并发收集所花费的时间不计入98%的时间限制。 换句话说,只有在应用程序停止时执行的收集才计入过多的GC时间。 此类收集通常是由于并发模式故障或显式收集请求(例如,对System.gc()的调用)引起的。
如第二段所述, GCTimeLimit在并行收集器上不能很好地工作,因为在这种情况下花费在GC上的时间不太重要。
为GCHeapFreeLimit选择默认值
 
选择默认值的方式应使当应用程序变得无响应(或由GC驱动)时,将导致内存不足。 无响应性是一个主观定义,可能因应用程序而异,因此对于不同的应用程序,其结果值可能会(略有不同)不同。
首先,应该创建一个简单的测试。 在应用程序内部运行并分配大量对象的类。 可以快速收集部分对象,并且可以长期保留部分对象。
在运行测试之前,应添加GC日志记录标志。 对于我的应用程序,添加了以下标志:
-Xmx960m-详细:gc -XX:+ PrintGCDetails -XX:+ PrintGCDateStamps -XX:+ PrintTenuringDistribution -Xloggc:/root/gc.log -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = / root / dumps
GC日志的输出如下所示。 第一个完整的GC周期–应用程序具有响应能力:
[完整GC [PSYoungGen:290112K-> 33213K(308672K)] [PSOldGen:655359K-> 655359K(655360K)] 945471K-> 688573K(964032K)]
几分钟后–应用程序无响应:
[完整GC [PSYoungGen:290112K-> 213269K(308672K)] [PSOldGen:655359K-> 655359K(655360K)] 945471K-> 868629K(964032K)]
对于950 Mb堆,内存空间的分布为:老gen = 650Mb,年轻= 300Mb。 当应用程序响应时,老一代将充满强大的参考数据,而大多数年轻一代则是垃圾。
因此,GCHeapFreeLimit的一个估计是(清除所有年轻人,不清除任何旧东西)300/950〜32%。
但是,随着时间的流逝,无法将年轻空间中的物体提升为旧空间,因为空间已满。 就像在Oracle文档中所说的那样: 最年轻的集合并不需要保证完全升级所有活动对象。 (-XX:+ HandlePromotionFailure标志)。
由于促销失败,因此引用的对象比年轻一代期望的要多得多。 为了安全起见(减少误报),我假设当年轻空间的1/3以上是垃圾空间而旧空间已满时,系统由GC驱动。
因此,我建议类似我的应用的比率是200/950〜20%。
-XX: GCHeapFreeLimit = 20
实验表明,OOM在超出20%限制的1-2分钟过量GC后发生,在此期间发生30-35个完整GC。
结论
在没有灵丹妙药的Java中,识别过多的垃圾回收是一项艰巨的任务。 热点JVM开发人员提供了一些方法,这些方法将经常有助于识别根本原因。 如果正确使用GCHeapFreeLimit和GCTimeLimit标志,可以使用适当的值来阐明问题。
参考资料
1. http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
2. http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
参考:来自The Art of Java博客的JCG合作伙伴 Art Gourevitch 在Hotspot JVM中跟踪过多的垃圾收集 。

翻译自: https://www.javacodegeeks.com/2012/06/tracking-excessive-garbage-collection.html

hotspot jvm

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

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

相关文章

计算机上平方米的单位,word怎么写平方米 word中平方米的单位怎么打

1、以Word2010版本为例,在文档中输入了平方米的单位,但是数字2不在上方;2、首先选中数字2,然后点击页面上方的上标图标,如下图所示;3、点击上标图标后,就会发现数字2在字母的右上方了&#xff0…

Xamarin 2017.10.9更新

Xamarin 2017.10.9更新本次更新主要解决了一些bug。Visual Studio 2017升级到15.4获得新功能。Visual Studio 2015需要工具-选项-Xamarin进行更新,更新Xamarin插件到4.7.10.22 版本。工具包分享链接:http://pan.baidu.com/s/1dE5hnCP 密码:3k…

通过入侵JVM打印阵列

总览 Java中最常见的陷阱之一就是知道如何打印数组。 如果有关如何打印阵列的答案获得了超过1000票赞成票,那么您必须怀疑是否有更简单的方法。 几乎所有其他流行语言都具有这种更简单的方法,因此我不清楚Java为什么仍会这样做。 与其他JDK类不同&#…

一种同于计算机键盘的测试装置,一种计算机键盘按键测试装置

主权项:1.一种计算机键盘按键测试装置,包括顶架以及固定安装在顶架正下方的测试机,其特征在于:顶架底面与测试机顶面之间固定连接有连接架,测试机内设有敲打装置和除尘装置,敲打装置包括设置在测试机左侧底…

SQL Server 索引重建手册

注意:索引重建前建议把数据库切换为完整模式,否则索引复制会在数据文件中进行,导致数据文件很大,而数据文件的收缩比日志文件的收缩要困难的多,且会对业务造成影响。步骤一:查询索引碎片,脚本如下&#xff…

三角形面积计算机方法,数学知识点:三角形面积的计算

原标题:数学知识点:三角形面积的计算复习1、说说长方形、平行四边形的面积计算公式。长方形的面积长宽平行四边形的面积底高2、 计算下面长方形和平行四边形的面积.生活中常见的三角形思考 :怎样应用所学的方法探究三角形的面积计…

mysql学习第二天

alter tables转载于:https://www.cnblogs.com/hanxue112253/p/7657309.html

apache camel_令人印象深刻的第一个Apache Camel版本

apache camel在准备下周的CamelOne会议时,我花了一些时间回顾一下Apache Camel项目的历史。 因此,除其他外,我了解了Apache Camel的第一个正式1.0版本 。 Apache Camel 1.0 – 5年前 我看的越多,这个版本的事实给我留下了深刻的印…

notion自建服务器,【速报】Notion的特色「双向链接」方案来了,Synced Block 登场...

Notion 作为一款出色的「聚合型」(All-In-One)笔记 App,在这几年里逐渐获得了不少知识工作者的宠爱。在以前,大家一般会高度赞扬 Notion 的「模块化」编辑器,但同时也会好奇什么时候 Notion 可以带来像Roam Research 那样的 「双向链接」功能…

English 动词篇

动词后加to do 和 doing的记忆口诀 一、只能用动名词(ing)作宾语 [口诀] 考虑建议盼原谅,承认推迟没得想。 避免错过继续练,否定完成停欣赏。 禁止想象才冒险,不禁介意弃逃亡。 consider考虑suggest建议/advocate 提倡主张look forw…

本周Java技巧#7 – Maven慢吗?

本周Java本周技巧是有关Maven的上一期的后续内容。 第一个视频介绍了与Maven依赖关系有关的方面。 该视频将介绍一些加快Maven构建速度的技术。 Maven慢吗? 从Maven 3开始,您可以并行运行构建。 根据构建机器和项目结构的不同,您可能会获得6…

华北电力大学的计算机类专业排名,2018年华北电力大学王牌专业排行榜,考生和家长们都好好看看!...

华北电力大学有两个校区,一个是北京校区,一个是保定校区,在理科类的院校中,这所大学还是非常不错的,小编有幸去这个学校玩过几次,这个学校的占地面积非常大,环境相对比较优美,而且学…

剑指offer之 二叉搜索树的后续遍历序列

题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {if(sequence.lengt…

11input/output

输出重定向 command1 > file1 vim test hello cat test who > users cat test echo "nihao" > test cat test 输入重定向 command1 < file1 wc -l test  统计行数 重定向深入了解 一般情况下&#xff0c;每个 Unix/Linux 命令运行时都会打开三个文件&a…

算力云服务器是干啥的,云服务器将成趋势计算力和安全性是考验

云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。通常来说&#xff0c;平台的每个集群节点被部署在互联网的骨干数据中心&#xff0c;可以独立提供计算、存储、在线备份、托管、带宽等互联网基础设施服务。关注的是高性能吞吐量计算能力&#xff0c;关注的是…

构建忽略测试_分类测试以减少构建时间

构建忽略测试在继续本文的主要内容之前&#xff0c;让我们先进行一些定义。 单元测试 单元测试是小型的&#xff08;测试一个用例或一个单元&#xff09;&#xff0c;在内存中运行&#xff08;不与数据库&#xff0c;消息队列等交互&#xff09;&#xff0c;可重复且快速的测试…

[Ctsc2014]企鹅QQ

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB[Submit][Status][Discuss]Description PenguinQQ是中国最大、最具影响力的SNS&#xff08;Social Networking Services&#xff09;网站&#xff0c;以实名制为基础&#xff0c;为用户提供日志、群、即时通讯…

ajax后台怎么取mapp,后台管理实现

京淘后台管理实现1.1 商品列表展现1.1.1 商品POJO对象1.1.2 表格数据页面结构1.1.3 请求URL地址说明&#xff1a;如果采用UI框架并且添加了分页插件&#xff0c;则会自动的形成如下的URL请求地址1.1.4 编辑ItemController1.1.5 编辑ItemService1.1.6 编辑ItemMapper手动编辑分页…

让工厂美丽

每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷&#xff0c;标准化的方法&#xff0c;它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是&#xff0c;在使用大型系统时&#xff0c;该模式确实会向系统添加大量样板代码。 对于每个实体&#xff…

UVa10779 - Collectors Problem(最大流)

题目链接 简介&#xff1a;交换贴纸 分析&#xff1a; 这也算是一个天坑了 很久之前就看过这道题&#xff0c;但是一直没有填 美妙的建图&#xff1a; 我们用n-1个点表示每个除Bob之外的人 用m个点表示贴纸&#xff0c;从源点向这m个点连边&#xff0c;边的容量是Bob拥有该…