最近碰到一个头疼的Full gc 问题,系统运行缓慢,但是使用 jstat -gcutil pid工具一看,堆内存占用不到10%,为啥会这样?
查看JVM配置如下 :
-Xms8G -Xmx8G -XX:NewRatio=4 XX:MaxPermSize=512m -Djava.awt.headless=true -XX:+UseCompressedOops -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
嗯?gc方式没有指定?
使用Jconsole连上去看下VM概要,看下gc方式是啥,年老代的Full gc 时间与次数都不正常:
垃圾收集器:
|
名称 = 'PS MarkSweep', 收集 = 56, 总花费时间 = 6.000 分
|
垃圾收集器:
|
名称 = 'PS Scavenge', 收集 = 47, 总花费时间 = 49.776 秒
|
|
竟然并行收集不靠谱,尝试使用并发收集,
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
结果Full gc的更厉害了,平均一秒一次。
是什么问题导致了一直gc? 经过网上大神的指导,使用命令
jstat -J-Djstat.showUnsupported=true -snap [pid] 查看平均晋升空间,结果也不是这个问题,平均晋升空间远小于old区剩余空间呢。
后来经网友提醒, jstat -gccause pid 查看gc详细原因(一开始怎么没想到查看full gc原因,还是太嫩了,停留于表层的问题排查。)
发现程序中显示调用了 System.gc(),原因是程序中使用到了DirectorByteBuffer,使用了直接内存引用,程序每进行一次梳理,都进行一次 System.gc()的调用,以免发生OOM,但是调用也太频繁了,堆内存空间完全足够呢,就调用了System.gc()。
殊不知
调用System.gc时,系统会建议执行Full GC,但是不必然执行,所以频繁发生了Full gc 问题。
调整程序,当堆内存不足的时候,才调用System.gc(),问题解决。
一、场景描述上周开始系统在业务高峰期一直收到Fullgc报警,监控显示fgc频繁,下图是监控图,左边红框是优化前效果,右边是优化后,优化后fgc基本为0 二、原因查找1.查看gc日志,发现old区fg...
来自:
n8765的专栏
2016年04月10日23:02:43阅读数:2689案例1 系统高峰期fullGC频繁,优化后恢复正常。 导致原因: 系统中有一个调用频繁的接口会调用下面这个方法,目的是获取图片的宽高信息,但是Im...
来自:
大JAVA解决方案
我们的Java应用因频繁FULLGC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下:4.758:[FullGC[PSYou...
来自:
varyall的专栏
堆内存划分为Eden、Survivor和Tenured/Old空间,如下图所示:从年轻代空间(包括Eden和Survivor区域)回收内存被称为MinorGC,对老年代GC称为MajorGC,而Ful...
来自:
iteye_6274的博客
本人刚接触jvm调优不久,对调优的步骤有点迷茫,在此向大牛请教个问题: 测试软件环境:eclipse3.7,tomcat6,visualVM1.3.7,压力测试工具loaderunner11, 用lo
1起因小组中遇到了虚拟机fullgc曾多的问题.监控显示如下:监控显示.每分钟进行5次fullgc.每次大约半秒..不过在我看来这么多fullgc并不是大问题..但是,组里面的大大说正常情况下是没有f...
来自:
bleuesprit的专栏
说明:这个是两三年前的一个案例,刚刚新开发的服务,jdk版本为1.71、问题描述:某服务线程十几分钟就出现一次fullGC现象,需要优化(其他4个服务也存在类似问题)2、问题原因:jvm永久带未配置(...
来自:
varyall的专栏
问题描述最近公司的线上监控系统给我推送了一些kafkalag持续增长的消息,我上生产环境去看了相应的consumer的情况,发现几台机器虽然还在处理消息,但是速度明显慢了很多。问题猜测与验证我猜测是J...
来自:
沈鸿斌的博客
一、现象早上九点多又收到了fullGC次数过高的应用监控告警{P1}{故障}JVMOldGCall(#3)full_gc_count >5}{当前值:28},通过公司使用的监控平台可以观察到服务器在...
来自:
elricboa的专栏
Java程序经常FullGC时如何解决问题?查看jvm内存使用情况,看是否存在如下特征(jvm查看工具如jmap,jhat,jprofier,zprofier等):1)年老代是否被写满2)持久代是否被...
来自:
adjvet的专栏
一,问题描述今天上午时候,kafka的一个topic涌上来超过平常值的一堆数据,消费客户端就开始出现了几个明显的问题:1,首先是ZK连接超时2,CPU飙升到400%3,观察程序GC,发现老年代,S0,...
来自:
weixin_33757609的博客
参考:http://blog.sina.com.cn/s/blog_48d4cf2d0102w18d.htmlspring整合消息队列rabbitmq:https://my.oschina.net/n...
来自:
RodJohnson_523391的专栏
1.FullGC次数过多 2.CPU过高 3.不定期出现的接口耗时现象 4.某个线程进入WAITING状态 5.死锁 6.小结出处:https://my.oschina.net/zhangxufeng...
来自:
yangg51的专栏
堆内存划分为Eden、Survivor和Tenured/Old空间,如下图所示:从年轻代空间(包括Eden和Survivor区域)回收内存被称为MinorGC,对老年代GC称为MajorGC,而Ful...
来自:
end's coding life
问题的发现:看到线上的服务机器一些节点时不时地有TCP报警,所以我们断定是TCP的连接出现了问题。让我们来回顾一下TCP的三次握手和四次挥手,借网上的一个图:sinaifullgcwithpromot...
来自:
Weiguang_123的专栏
背景我们都知道,基于Kubernetes的微服务,大行其道,传统部署模式一直都在跟着变化,但其实,在原有业务向服务化方向过度过程中,有些场景可能会变得复杂。比如说:将Kubernetes的模式应用到开...
来自:
weixin_34216036的博客
1,Java内存溢出包括:堆内存溢出和栈内存溢出首先说下:内存溢出和内存泄露内存溢出:outofmemory是指程序申请内存时没有足够的空间了内存泄露:memroyleak,是指程序申请内存后,无法释...
来自:
zhouxihua18969186066的博客
原文地址:http://caogen81.iteye.com/blog/1513345 我们的Java应用因频繁FULLGC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研...
来自:
坦GA的博客
我这两天在面试一个工作,他们好像遇到问题,可能现在的系统代码质量不高,GC每3 秒钟启动一次,他问我是不是修改JVM的参数可以解决,调正GC的young、old、 permanent的大小?我过两天要
自己工作那么久很少接触到内存调整方面的问题,很巧的是最近两个系统频繁出现了GC回收始终高于75%同时长久不触发OC的回收。自己看到这些很是开心啊,终于有了机会来体验面试中常问的是否有过内存调优方面的经...
来自:
wngua的专栏
内存抖动内存抖动是因为大量的对象被创建又在短时间内马上被释放,如循环中分配对象,很容易引起GC,特别是在较大的循环次数或者一个循环中分配较多的临时对象时。瞬间产生大量的对象瞬间产生大量的对象,即使对象...
来自:
u011337574的专栏
一、基础知识1. SunJVM内存基本结构:其中,比较重要的是PermanentSpace(方法区),JavaObjectHeap(堆区) HeapSpace又可分为YoungGen...
来自:
u011983389的专栏
JVM内存的设置的原理 默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。设置jvm内存的方法,对于单独的.class,可以...
来自:
user4570的专栏
最近,公司网站频繁报警,JVM_OLD占用过高,线上访问超时严重,针对这个问题着实头疼了一把,不过最终还是解决了,下面说下解决的过程。1,首先登到线上机器上去,top命令,查看当前机器的负载,查看当前...
来自:
关于代码的那点事儿...
监控工具:jvisualVM、VisaulVM、jprofilerJVM优化书籍:《Java性能优化权威指南》、《深入理解java虚拟机》1.年轻代空间不足2.per Gen(永久代)空间满3.CMS...
来自:
qq_38056704的博客
JVM频繁FullGC导致服务不可用定位过程背景:问题描述:JVM启动参数配置:Jstat实时监控真相逐渐浮现jstat分析gc原因:使用mat辅助分析定位哪里引用了groovy导致内存泄漏查看Sha...
来自:
西湖烟雨梦的专栏
对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了...
来自:
believer123的专栏
记录一次java虚拟机CPU飙高的异常处理线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会偶现同样的问题。...
来自:
hotthought的专栏
返回博客列表转关于施用fullgc频繁的分析及解决DEC_LIU发布时间:2013/10/1320:32阅读:3431收藏:14点赞:1评论:1关于应用fullgc频繁的分析及解决很久前的工作日记了,...
来自:
weixin_34087301的博客
缘起线上有Tomcat升级到7.0.52版,然后有应用的JVMFullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代...
来自:
横云断岭的专栏
最近时间比较紧张,要写的东西也有很多,只能想到一点写一点。关于GC,网上的资料太多,之前对一个系统调优的时候又回顾了一下,找了几篇广泛流传的资料,大部分都是大同小异,这里总个总结,希望能够做个相对的全...
来自:
ITer_ZC的专栏
前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError:PermGensp...
来自:
blade2001的专栏
工欲善其事,必先利其器简介本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多;第二个是javacpu100%排查,这个实际的开...
来自:
阿飞云
看图,图很清楚了[align=left][img]http://dl2.iteye.com/upload/attachment/0115/0711/75a8139f-c3e3-31fe-8c96-3a...
来自:
iefjovi的专栏
FullGC频繁原因排查:https://blog.csdn.net/wilsonpeng3/article/details/70064336出发fullgc的条件:程序执行了System.gc()/...
来自:
weixin_39156738的博客
这是笨神JVMPocket群里一位名为"云何*住"的同学提出来的问题,问题现象是CPU飙高并且频繁FullGC。重现问题这位同学的业务代码比较复杂,为了简化业务场景,笔者将其代码压...
来自:
weixin_34146410的博客
转载自 一次频繁FullGC的排查过程,根源居然是它...业务部门的一个同事遇到个奇怪的FullGC问题,有个服务迁移到新的应用后,一直频繁FullGC。新应用机器的配置是4c8g,老应用是4c4g...
来自:
茅坤宝骏氹的博客
fullgc频繁说明old区很快满了。如果是一次fullgc后,剩余对象不多。那么说明你eden区设置太小,导致短生命周期的对象进入了old区。如果一次fullgc后,old区回收率不大,那么说明ol...
来自:
lz710117239的博客
S0:Heap上的Survivorspace0段已使用空间的百分比S1:Heap上的Survivorspace1段已使用空间的百分比E:Heap上的Edenspace段已使用空间的百分比O:Heap上...
来自:
zizihaier的专栏
命令格式jstat命令命令格式:jstat[Options]vmid[interval][count]参数说明:Options,选项,我们一般使用-gcutil查看gc情况vmid,VM的进程号,即当...
来自:
sundful的专栏
jps(JavaVirtualMachineProcessStatusTool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前...
来自:
zhanshenyn的专栏
app与后台的token、sess...
qq_33913324:
在Token未失效前,Token是固定的,约定变量是固定的,Token+约定变量是固定的,MD5(Token+约定变量)也是固定的,那么为什么要花这么大力气加密?直接用Token不就完了??
app与后台的token、sess...
zapperbot:
sessionId能被截取,签名一样也能被截取,没多大意义