频繁发生fullgc的原因和定位思路
向一个集合里添加很多数据这种OOM的例子就不说了
1.内存飙升频繁FullGC
内存飙升频繁FullGC又没有发生OOM很明显这个对象在年轻代没有被销毁进入了老年代,
至于为什么不会OOM是因为这个对象的生命周期很短比如5秒所以每次fullgc都能回收掉
导致对象没有在年轻代被回收的原因有以下情况该
1.对象的内存比年轻代还大,比如对象100兆,年轻代50兆直接放入老年代
2.触发了动态年龄判断放入老年代
3.触发了空间担保机制放入老年代
4.高并发方法执行慢,产生的内存多年轻代装不下此时进行进行youngGC也回收不掉,
是因为方法没有结束是不能回收方法内的gcroot的,那么此时在进来10个个线程这些线程
产生的数据年轻代装不下那么就放入老年代里,当5秒过后这些方法才执行完那么此时的方法
才出栈如果老年代满了是可以回收掉这些垃圾的,如果并发量在高些就会发生OOM,
比如老年代存放的都是2秒后方法才结束的对象当内存满了进行fullgc是回收不掉的因为这些对象
2秒后才能成为垃圾4核8线程
-Dfile.encoding=utf-8
-Xms400m
-Xmx400m
-XX:MetaspaceSize=512m
-XX:SurvivorRatio=8
-Xss512k
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=f:/dev/
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:f:/dev/gc.log情况一 方法执行很快产生的垃圾处理情况
并发量中等但是方法产生的垃圾小
[8并发]:[单个方法耗时40毫秒占用1m]:[是否fullgc false]
并发量中方法产生的垃圾大
[8并发]:[单个方法耗时70毫秒占用2m]:[是否fullgc true]
并发量高但是方法产生的垃圾小
[高并发]:[单个方法耗时40毫秒占用1m]:[是否fullgc true]情况二 方法执行很慢产生的垃圾处理情况
并发量中但是方法产生的垃小
[8并发]:[单个方法耗时1000毫秒占用1m]:[是否fullgc false]
并发量高但是方法产生的垃小
[高并发]:[单个方法耗时1000毫秒占用1m]:[是否fullgc true]
并发量中方法产生的垃大
[8并发]:[单个方法耗时1000毫秒占用2m]:[是否fullgc true]
并发量高方法产生的垃大
[高并发]:[单个方法耗时1000毫秒占用2m]:[OOM]
总结:方法执行慢并且产生的垃圾多那么就很容易频繁fullgc和oom,而高并发就容易让这个条件满足
2.解决高并发并发fullgc
采用线程池控制并发数量,
没控制并发前
控制并发后
方式一线程池
@RestController
@RequestMapping("/userOrder")
public class UserOrderController {ExecutorService executorService = Executors.newFixedThreadPool(2);@RequestMapping("/hello")public String hello(){executorService.submit(()->{//模拟service方法产生100的垃圾,2个线程最高200m垃圾B b = new B(1);});return "success";}
}
方式二Semaphore (推荐)
@RestController
@RequestMapping("/userOrder")
public class UserOrderController { static Semaphore semaphore = new Semaphore(10,true);@RequestMapping("/hello")public String hello(){try{//请求一个信号semaphore.acquire();B b = new B(1);//释放一个信号semaphore.release();}catch (Exception e){e.printStackTrace();}return "success";}
}
频繁发生fullgc的原因和定位思路相关推荐
- 线上频繁发生Full GC 如何调优?如何快速定位OOM、cpu飙升、线程死锁等问题
文章目录 1. jvm调优命令.工具介绍 ①:jps ②:jmap 查看应用中各实例生成情况 快速定位内存突然飙升导致的OOM异常 查看堆内存使用情况 ③:Jstack 检测线程死锁 快速定位导致cp ...
- 【系统缓慢、CPU 100%、频繁Full GC问题】的定位排查思路!
作者:爱宝贝 https://my.oschina.net/zhangxufeng/blog/3017521 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次 ...
- CMS发生FullGc分析
fullgc的原因 Full GC触发条件: (1)System.gc()方法的调用 该方法不一定执行,但是执行的时候是fullgc. (2)老年代空间不足 老年代空间只有在新生代对象转入及创建为大对 ...
- 从一次线上故障思考Java问题定位思路,java初级面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- 从一次线上故障思考Java问题定位思路
问题出现:现网CPU飙高,Full GC告警 CGI 服务发布到现网后,现网机器出现了Full GC告警,同时CPU飙高99%.在优先恢复现网服务正常后,开始着手定位Full GC的问题.在现场只能够 ...
- 解决fullgc_CMS发生FullGc分析
fullgc的原因 Full GC触发条件: (1)System.gc()方法的调用 该方法不一定执行,但是执行的时候是fullgc. (2)老年代空间不足 老年代空间只有在新生代对象转入及创建为大对 ...
- 无盘服务器0x00000124,知识分享电脑故障0x00000124导致蓝屏的原因和解决思路-电脑蓝屏原因...
电脑知识分享电脑故障0x00000124导致蓝屏的原因和解决思路 电脑知识分享 电脑故障0x00000124导致蓝屏的原因和解决思路 电脑知识分享 电脑知识分享:蓝屏的原因和解决思路 蓝屏出错代码的缘 ...
- _findnext()调试中断,发生访问错误,错误定位到ntdll.dll
_findnext()调试中断,发生访问错误,错误定位到ntdll.dll 将 long hFile 改为 intptr_t hFile 即可. 原因:关于intptr_t C++遍历文件夹下的子目 ...
- 计算机主机异常经常蓝屏,计算机频繁发生蓝屏怎么解决
计算机频繁发生蓝屏怎么解决 计算机运行软件时会出现蓝屏提示应用程序错误 根据蓝屏故障分析,由于计算机新装的系统后出现的蓝屏,系统应该正常,问题可能在安装的软件上或硬件方面引起蓝屏.首先检查软件方法的原 ...
最新文章
- Swift 中的内存管理详解
- 为什么我不在微信公众号上写文章
- Kibana模块——介绍
- mybatis,主键返回指的是返回到传入的对象中
- 如何成为一名数据中心运营工程师?
- ICCV 2017 《Online Video Object Detection using Association LSTM》论文笔记
- requests 可以 scrapy 不行_python学习教程,B站博人传评论数据抓取 scrapy
- case when语句中加上and or的处理方式
- c++ 高效解析url算法
- Web页面请求的历程(从应用层到链路层)
- cornerstone 使用
- 我的世界f服务器自定义皮肤,我的世界服务器皮肤指令
- 使用C语言打印出一个菱形
- AD14简明使用教程(同样试用于手工制板)
- 用 js判断 一个数是否是素数(质数)_js 基础算法题(二)
- 关于如何阅读英文文献(干货详解)
- 计算机桌面搜狗输入图标不见了怎么办,电脑上搜狗输入法状态栏突然不见了怎么办 如何找到电脑中所失去的输入法...
- 花生地铁WiFi运营商称“上亿用户资料泄露”系杜撰
- 解决win10计算机管理中没有本地用户和组
- 微信记录恢复助手官方版
热门文章
- Pixel Stream 源码分析
- Altera_MAX_Plus_II_v10.2破解软件下载安装
- 极光推送 android6.0,极光推送Unity-Android-API
- 最高月薪13K!95年设备小哥结束工厂“倒班生活”,三个月转行开启技术人生!
- Flutter——头像上传功能,实现照片选择及裁剪
- 【Windows】【Audio】Windows 11 声音配置
- 快来看,SATA秘籍惊现江湖!!!
- 从 0 到 1 教你在亚马逊云科技中部署动态网站 Typecho 系统
- jin tian xin qing gen tian qi yi yang!
- fiddler网络限速技巧