• JVM调优


    调优前的基础概念:

    1. 吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间)
    2. 响应时间:STW越短,响应时间越好

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

     

    一般1.8之后,暂且默认G1就可以了,综合性比较强。其他新代垃圾回收器都在试验阶段

     

    什么是调优?

    1. 根据需求进行JVM规划和预调优
    2. 优化运行JVM运行环境(慢,卡顿)
    3. 解决JVM运行过程中出现的各种问题(OOM)

    调优,从规划开始

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

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

    • 步骤:

      1. 熟悉业务场景(没有最好的垃圾回收器,只有最合适的垃圾回收器)
        1. 响应时间、停顿时间 [CMS G1 ZGC] (需要给用户作响应)
        2. 吞吐量 = 用户时间 /( 用户时间 + GC时间) [PS]
      2. 选择回收器组合
      3. 计算内存需求
      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. 观察日志情况
    • 案例1:垂直电商,最高每日百万订单,处理订单系统需要什么样的服务器配置?

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

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

      经验值,

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

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

      压测!

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

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

      号称并发量100W最高

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

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

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

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

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

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

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

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

      2. 用压测来确定

    优化环境

    1. 有一个50万PV的资料类网站(从磁盘提取文档到内存)原服务器32位,1.5G 的堆,用户反馈网站比较缓慢,因此公司决定升级,新的服务器为64位,16G 的堆内存,结果用户反馈卡顿十分严重,反而比以前效率更低了
      1. 为什么原网站慢? 很多用户浏览数据,很多数据load到内存,内存不足,频繁GC,STW长,响应时间变慢
      2. 为什么会更卡顿? 内存越大,FGC时间越长
      3. ParNew+CMS多服务 或者 G1
    2. 系统CPU经常100%,如何调优?(面试高频) CPU100%那么一定有线程在占用系统资源,
      1. 找出哪个进程cpu高(top)
      2. 该进程中的哪个线程cpu高(top -Hp)
      3. 导出该线程的堆栈 (jstack)
      4. 查找哪个方法(栈帧)消耗时间 (jstack)
      5. 工作线程占比高 | 垃圾回收线程占比高
    3. 系统内存飙高,如何查找问题?(面试高频)
      1. 导出堆内存 (jmap dump),查看 jmap -histo(也有一定影响,但在线上考虑情况也是可以用的)
      2. 分析 (jhat jvisualvm mat jprofiler ... )
    4. 如何监控JVM
      1. jstat jvisualvm jprofiler arthas(线上在线排查) top...
  • 相关阅读:
    BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路
    BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币
    BZOJ 1642: [Usaco2007 Nov]Milking Time 挤奶时间
    BZOJ 1611: [Usaco2008 Feb]Meteor Shower流星雨
    BZOJ 1610: [Usaco2008 Feb]Line连线游戏
    BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
    BZOJ 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
    BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
    BZOJ 1083: [SCOI2005]繁忙的都市
    STL set的用法
  • 原文地址:https://www.cnblogs.com/gabin/p/13599337.html
Copyright © 2020-2023  润新知