JVM 调优实战--什么是调优及如何调优的思路

目录


吞吐量及响应时间

什么是调优

调优,从规划开始

优化环境


吞吐量及响应时间

①吞吐量:用户代码时间/(用户代码时间+垃圾回收时间)。吞吐量越大,说明干正经事的时间占比越高;

② 响应时间:STW(stop the world)越短,响应时间越好。

什么是调优

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

  2. 优化运行JVM运行环境

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

所谓调优,首先要确定追求的是啥?是吞吐量优先还是响应时间优先?或者是在满足一定的响应时间的前提下,要求达到一定的吞吐量?有的放矢才能做好调优这活!

如果是选择吞吐量优先,一般选择的是PS+PO这个组合

调优,从规划开始

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

  • 无监控,不调优

  • 步骤:

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

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

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

    2. 选择回收器组合

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

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

    5. 设定日志参数

      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. 或者每天产生一个日志文件

    6. 观察日志情况

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

    这个问题比较业余,因为很多不同的服务器配置都能支撑(1.5G 16G)

    1小时360000集中时间段, 100个订单/秒

    经验值,

    专业一点儿问法:要求响应时间100ms

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

    12306应该是中国并发量最大的秒杀网站:

    号称并发量100W最高

    CDN -> LVS -> NGINX -> 业务系统 -> 每台机器1W并发 100台机器

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

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

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

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

  • 怎么得到一个事务会消耗多少内存?

    1. 弄台机器,看能承受多少TPS?是不是达到目标?扩容或调优,让它达到

    2. 用压测来确定

优化环境

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

  2. 系统CPU经常100%,如何调优?

你可能感兴趣的:(JVM调优)