JVM Optimization Learning(四)

目录

一、调优

1、基础概念

2、什么是调优?

3、调优,从规划开始

4、调优案例


一、调优

1、基础概念

**吞吐量:**用户代码执行时间 /(用户代码执行时间 + 垃圾回收时间)

**响应时间:**STW越短,响应时间越好

所谓调优,首先确定,追求啥?吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐量...

吞吐量:科学计算、数据挖掘;吞吐量优先的一般:(PS+PO)

响应时间:网站 GUI API(1.8 G1)

2、什么是调优?

  1. 根据需求进行JVM规划和预调优

  2. 优化运行JVM运行环境(慢,卡顿)

  3. 解决JVM运行过程中出现的各种问题(OOM)

3、调优,从规划开始

调优,从业务场景开始,没有业务场景的调优都是耍流氓

无监控(压力测试,能看到结果),不调优

步骤:

  1. 熟悉业务场景(没有最好的垃圾回收器,只有最合适的垃圾回收器)

    1. 响应时间、停顿时间 [CMS G1 ZGC] (需要给用户作响应)

    2. 吞吐量 = 用户时间 /( 用户时间 + GC时间) [PS]

  2. 选择垃圾回收器组合

  3. 计算内存需求(经验值 1.5G 16G)

  4. 选定CPU(越高越好)

  5. 设定年代大小、升级年龄

  6. 设定日志参数

    1. -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

    2. 或者每天产生一个日志文件

  7. 观察日志情况

4、调优案例

**案例1:**垂直电商,最高每日百万订单,处理订单系统需要什么样的服务器配置?

1小时360000集中时间段, 100个订单/秒,(找一小时内的高峰期,1000订单/秒)

**计算:**一个订单产生需要多少内存?512K * 1000 500M内存

**案例2:**12306遭遇春节大规模抢票应该如何支撑?

12306应该是中国并发量最大的秒杀网站:号称并发量100W最高

CDN -> LVS -> NGINX -> 业务系统 -> 每台机器1W并发(10K问题) 100台机器

普通电商订单 -> 下单 ->订单系统(IO)减库存 ->等待用户付款

12306的一种可能的模型: 下单 -> 减库存 和 订单(redis kafka) 同时异步进行 ->等付款

减库存最后还会把压力压到一台服务器

可以做分布式本地库存 + 单独服务器做库存均衡

大流量的处理方法:分而治之

**案例3:**有一个50万PV的资料类网站(从磁盘提取文档到内存)原服务器32位,1.5G 的堆,用户反馈网站比较缓慢,因此公司决定升级,新的服务器为64位,16G 的堆内存,结果用户反馈卡顿十分严重,反而比以前效率更低了

  1. 为什么原网站慢? 很多用户浏览数据,很多数据load到内存,内存不足,频繁GC,STW长,响应时间变慢
  2. 为什么会更卡顿? 内存越大,FGC时间越长
  3. 怎么办? PS -> PN + CMS 或者 G1

**案例4:**系统CPU经常100%,如何调优?(面试)

CPU100%那么一定有线程在占用系统资源,

  1. 找出哪个进程cpu高(top)

  2. 该进程中的哪个线程cpu高(top -Hp)

  3. 导出该线程的堆栈 (jstack)

  4. 查找哪个方法(栈帧)消耗时间 (jstack)

  5. 工作线程占比高 | 垃圾回收线程占比高

**案例5:**系统内存飙高,如何查找问题?(面试)

  1. 导出堆内存 (jmap)

  2. 分析 (jhat jvisualvm mat jprofiler ... )

**案例6:**如何监控JVM

1.jstat jvisualvm jprofiler arthas top...

JVM Optimization Learning(三)

再小的努力,乘以365都很明显!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

相关推荐
柯3493 小时前
GC垃圾回收
java·jvm·垃圾回收
王佑辉3 小时前
【jvm】执行引擎是做什么
jvm
平头哥在等你3 小时前
C语言简答题答案
java·c语言·jvm
zhuzhihongNO15 小时前
JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续
java·开发语言·jvm·内存溢出·jvm内存溢出
MaxCosmos20015 小时前
读《Effective Java》笔记 - 条目7
java·jvm·笔记
学点东西吧.5 小时前
JVM(六、Java内存分配)
java·开发语言·jvm
极客先躯6 小时前
高级java每日一道面试题-2024年11月23日-JVM篇-什么时候会出发FullGC?
java·jvm·fullgc·jvm篇·老年代内存不足·system.gc·减少full gc的策略
m0_7482329210 小时前
JVM的内存区域划分
java·jvm·算法
guokanglun12 小时前
自动化的内存管理技术之垃圾回收机制-JavaScript引用数据内存回收机制
运维·jvm·自动化
极客先躯13 小时前
高级java每日一道面试题-2024年11月24日-JVM篇-说说对象分配规则?
java·jvm···对象分配规则