JVM调优--06---调优案例汇总
Posted 高高for 循环
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM调优--06---调优案例汇总相关的知识,希望对你有一定的参考价值。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
案例汇总
1 .硬件升级系统反而卡顿的问题
2. 线程池不当运用产生OOM问题
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 从数据库中读取信用数据,套用模型,并把结果进行记录和传输
*/
public class T15_FullGC_Problem01
private static class CardInfo
BigDecimal price = new BigDecimal(0.0);
String name = "张三";
int age = 5;
Date birthdate = new Date();
public void m()
private static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50,
new ThreadPoolExecutor.DiscardOldestPolicy());
public static void main(String[] args) throws Exception
executor.setMaximumPoolSize(50);
for (;;)
modelFit();
Thread.sleep(100);
private static void modelFit()
List<CardInfo> taskList = getAllCardInfo();
taskList.forEach(info ->
// do something
executor.scheduleWithFixedDelay(() ->
//do sth with info
info.m();
, 2, 3, TimeUnit.SECONDS);
);
private static List<CardInfo> getAllCardInfo()
List<CardInfo> taskList = new ArrayList<>();
for (int i = 0; i < 100; i++)
CardInfo ci = new CardInfo();
taskList.add(ci);
return taskList;
提升–16—线程池–02—线程池7大参数、Executors工具类
3. 实际系统不断重启,gc频繁
- 解决问题 加内存 + 更换垃圾回收器 G1
- 真正问题在哪儿?不知道
解决 OOM 2 大法宝
1. 扩大内存,
2. 重启 jvm (12306—凌晨不卖票 ,有些游戏----定时系统维护)
4. tomcat http-header-size过大问题(Hector)
5. lambda表达式导致方法区溢出问题
public class LambdaGC
public static void main(String[] args)
for(;;)
I i = C::n;
public static interface I
void m();
public static class C
static void n()
System.out.println("hello");
6. 直接内存溢出问题(少见)
- 《深入理解Java虚拟机》P59,使用Unsafe分配直接内存,或者使用NIO的问题
7. 栈溢出问题
- Xss设定太小
8. 重写finalize引发频繁GC
小米云,HBase同步系统,系统通过nginx访问超时报警,最后排查,C++程序员重写finalize引发频繁GC问题
- 为什么C++程序员会重写finalize?(new delete)
- finalize耗时比较长(200ms)
9. System.gc()
如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的?
- 有人调用 System.gc() (这个比较Low)
10. sql语句联合查询
- 用jvm都会溢出,mycat用崩过,1.6.5某个临时版本解析sql子查询算法有问题,9个exists的联合sql就导致生成几百万的对象
案例 tomcat堆溢出
MyBatis缓存导致OOM
Mybatis缓存
MyBatis–03-- 一级缓存和二级缓存
生产案例
结论:
批量程序,r如果对数据库仅有select 操作循环中,
一定要记得commit 或者update操作,不然会缓存累积,最后导致OOM
以上是关于JVM调优--06---调优案例汇总的主要内容,如果未能解决你的问题,请参考以下文章