首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OOM和频繁GC预防方案

GC速度跟不上创建对象速度,还可能产生内存溢出。 3 高并发下的内存管理技巧 对开发者,GC不可控,无法避免。但可降低GC频率,减少进程暂停时长。...如把收到请求的Request对象在业务流程中一直传递下去,而非每执行一个步骤,就创建一个和Request对象差不多的新对象 那些需频繁使用,占用内存较大的一次性对象,可考虑自行回收并重用这些对象。...收到请求后,在对象池内申请一个对象,使用完后再放回对象池,这就能复用这些对象,有效避免频繁触发GC 使用更大内存的服务器。 根本解决该问题,办法只有一个:绕开自动GC机制,自己实现内存管理。...,防止频繁Major GC,如果晋升的对象过多大于老年代的连续内存空间也会有触发Full Gc,然后在这些处理文本的业务流程中,防止频繁的创建一次性的大对象,把文本对象做为业务流程直接传递下去,如果这些文本需要复用可以将他保存起来...,防止频繁的创建。

53340
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JVM 频繁GC快速排查捷径

    大家好,分享一个线上GC案例,相信会对大家有所帮助。 本人曾任职于阿里,每日优鲜等互联网公司,任技术总监。...在分享案例前,先聊聊哪些场景会导致频繁full gc: 1,内存泄漏(代码有问题,对象引用没及时释放,导致对象不能及时回收) 2,死循环 3,大对象...好,现在我们开始介绍这次线上故障: 在没有任何发布的情况下,pop服务突然开始疯狂full gc,观察堆内存监控没内存泄漏,回滚到前一版本,问题仍然存在。...按照常规做法,一般先用jmap导出堆内存快照(jmap -dump:format=b,file=文件名 [pid]),然后用mat等工具分析出什么对象占用了大量空间,再查看相关引用找到问题代码。...与此同时另外的同学去查看数据库网络IO监控,如果网络IO有明显上升,并且时间点吻合,基本可以确定是大结果集导致了full gc,赶紧找DBA快速定位大SQL(对DBA来说很简单,分分钟搞定,如果DBA不知道怎么定位

    55930

    频繁GC (Allocation Failure)及young gc时间过长分析

    序 本文主要分析一个频繁GC (Allocation Failure)及young gc时间过长的case。...再突破100,150,200,250 在8.5天的时间内,发生了9000多次gc,其中full gc为4次,平均将近8秒,大部分是young gc(allocation failure为主),平均270...Full GC (Metadata GC Threshold) 这里使用的是java8,参数没有明确指定metaspace的大小和上限,查看一下 jstat -gcmetacapacity 7 MCMN...GC (Allocation Failure) 分析完full gc之后我们看下young gc,看log里头99%都是GC (Allocation Failure)造成的young gc。...新生代垃圾回收机制 新对象尝试栈上分配,不行再尝试TLAB分配,不行则考虑是否直接绕过eden区在年老代分配空间(-XX:PretenureSizeThreshold设置大对象直接进入年老代的阈值,当对象大小超过这个值时

    11.9K21

    CPU飙高,频繁GC,怎么排查?

    这里我们基本上可以确定,当前系统缓慢的原因主要是垃圾回收过于频繁,导致GC停顿时间较长。...这种情况我们查看dump内存得到的文件即可判断,因为其会打印GC原因: [Full GC (System.gc()) [Tenured: 262546K->262546K(349568K), 0.0014879...总结来说,对于Full GC次数过多,主要有以下两种原因: 代码中一次获取了大量的对象,导致内存溢出,此时可以通过eclipse的mat工具查看内存中有哪些对象比较多; 内存占用不高,但是Full GC...CPU过高 在前面第一点中,我们讲到,CPU过高可能是系统频繁的进行Full GC,导致系统缓慢。而我们平常也肯能遇到比较耗时的计算,导致CPU过高的情况,此时查看方式其实与上面的非常类似。...此时就可以考虑是否是由于另外三种情况导致的问题。

    4.5K30

    JVM 频繁 FULL GC 快速排查整理

    在分享此案例前,先聊聊哪些场景会导致频繁Full GC: 内存泄漏(代码有问题,对象引用没及时释放,导致对象不能及时回收) 死循环 大对象 程序执行了System.gc() 尤其是大对象,...按照常规做法,一般先用 jmap导出堆内存快照(jmap -dump:format=b,file=文件名 [pid]),然后用 mat等工具分析出什么对象占用了大量空间,再查看相关引用找到问题代码。...-Xloggc:gc.log -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:...为了在此期间也能对外正常提供服务,建议采用分布式部署,并采用合适的负载均衡算法 dump下来的文件大约 1.8g,用 jvisualvm查看,发现用 char[]类型的数据占用了41%内存,同时另外一个...先按照常规做法分析堆内存快照,与此同时另外的同学去查看数据库服务器网络IO监控,如果数据库服务器网络IO有明显上升,并且时间点吻合,基本可以确定是数据库大结果集导致了Full GC,赶紧找DBA快速定位大

    5.5K10

    查看端口是否被占用 linux_如何查看8080端口是否被占用

    之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat -anp |grep 端口号 如下,我以3306为例,netstat -anp |grep 3306(此处备注下...,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图1: 图1 图1中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号...2.netstat -nultp(此处不用加端口号) 该命令是查看当前所有已经使用的端口情况,如图2: 图2 图中可以看出我的82端口没有被占用 3.netstat -anp |grep 82查看82...此处注意,图中显示的LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了 以上就是本文的全部内容,希望对大家的学习有所帮助

    34.7K10

    Linux命令-查看内存、GC情况及jmap 用法

    查看进程占用内存、CPU使用情况 1、查看进程 #jps 查看所有java进程 ?...gc情况 1、查看某个进程的对象占用对象最大情况 pid是进程号,20表示排名前二十,instances表示实例数量,bytes表示占用内存大小(1M=1024KB,1KB=1024Bytes) jmap...2、监控jvm内存,查看full gc频率 监控jvm,每5秒打印一次,循环100次 jstat -gc pid 5000 100 jstat -gcutil pid 5000 100 ? ?...2、heap查看内存使用情况 命令:jmap -heap pid 描述:显示Java堆详细信息 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息 C:\Users\jjs>...参考 Linux CPU占用率监控工具小结 Linux查看某一进程所占用内存的方法jvm查看full gc频率jmap命令 Linux 下 CPU 监控工具:https://mp.weixin.qq.com

    11.6K30

    记录线上服务频繁full gc问题排查

    影响用户体验将以最近一次基础服务FULL GC频繁的线上案例作为引子,详细介绍排查过程、思路、方法论;1、从最近一次基础服务FULL GC频繁的线上案例说起2、排查gc思路、方法论、过程3、GC的原理介绍一...2个即可,打开java.lang.thread @xd3330000展示详情,从下往上查看图片3、查看线程详情 选中线程邮件点击详情Thread Details查看具体发生的异常信息图片图片解决方案业务代码导致频繁...如果小于,说明YGC是不安全的,则会查看参数 HandlePromotionFailure 是否被设置成了允许担保失败,如果不允许则直接触发Full GC;如果允许,那么会进一步检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小...JDK的自带工具,包括jmap、jstat等常用命令:# 查看堆内存各区域的使用率以及GC情况jstat -gcutil -h20 pid 1000# 查看堆内存中的存活对象,并按空间排序jmap -histo...通过可疑对象定位到具体代码再次分析,这时候要结合GC原理和JVM参数设置,弄清楚可疑对象是否满足了进入到老年代的条件才能下结论。

    1.1K11
    领券