美文网首页
JVM(五)深入了解性能优化

JVM(五)深入了解性能优化

作者: 7ColorLotus | 来源:发表于2020-06-01 23:47 被阅读0次
  • 影响系统性能的方方面面

    1. 响应时间
    2. 并发数
    3. 吞吐量
    4. 关系
  • 常用的性能优化手段

    1. 避免过早优化
    2. 进行系统性能测试
    3. 寻找系统瓶颈,分而治之,逐步优化
  • 前端优化常用手段

    1. 浏览器/APP
      1)减少请求数:合并Css,Js,图片
      2)使用客户端缓存:静态资源文件缓存在浏览器或APP,Cache-Controle和Expire
      3)启用压缩:服务器端文件压缩,浏览器端解压缩,gzip。会给浏览器和服务器带来性能上的压力,需要权衡
      4)资源文件加载顺序:css>html>js
      5)减少cookie传输:静态资源不要使用cookie
    2. CDN加速:Content Dipatch Net,部署在网络运营商的机房
    3. 反向代理缓存:譬如Nginx,把前端资源放在Nginx里
    4. WEB组件分离:js.xxx.com/js,css.xxx.com/css.....同一个域名同一个时刻请求的线程数量有限
  • 应用服务性能优化

    1. 缓存:离用户越近越好
      a, 基本原理和本质:提高访问速度,减少计算次数
      b, 合理使用的缓存的原则:
      1)频繁修改的数据,尽量不要使用缓存,读写比要在2:1以上
      2)缓存一定是热点数据
      3)应用就要容忍一定时间的数据不一致
      4)缓存的可用性问题:缓存服务器宕机
      5)缓存预热:LRU和预先将一些热点数据放入缓存中
      6)缓存击穿:1)布隆过滤器;2)不存在数据也缓存起来
      
      c, 分布式缓存与一致性哈希
      1) jboss缓存,每个缓存服务器都缓存所有的数据
      2) redis,memcached。每个服务器只缓存一部分数据,一致性哈希(0-2的32次方),虚拟的一致性哈希,一个节点虚拟多个节点
      
    2. 集群
      a, F5硬件负载均衡,昂贵
      b,使用软件做负载均衡,如Nginx
    3. 异步
      a, 同步和异步:关注的是结果消息的通信机制
      b, 阻塞和非阻塞:关注的是等待结果返回给调用方的状态
      c, bio 同步阻塞,方法调用
      d, nio 同步非阻塞
      e, aio 异步非阻塞
      f, 常见的异步手段
      1)Servlet异步
      2)多线程
      3)消息队列
      
    4. 程序
      a, 代码级别
      1)选择合适的数据结构
      2)选择更优的算法
      3)编写更少的代码
      4)并发编程
      5)资源的复用:单例模式,池化技术
      
    5. JVM
      a, 与JIT编译器相关的优化
      1)热点编译的概念
      2)选择编译器类型 -server,-client,-XX:!TieredCompilation
      -Xint 禁用JIT
      -Xcomp 最快
      -Xmixed 混合
      3)代码缓存相关 -XX:ReservedCodeCacheSize=N
      jdk7 32-48
      jdk8 240m
      4)编译阈值
      a)方法调用计数器
      b)循环回边计数器
      c)-UseCounterDecay 启用衰减
      d)-XX:CounterHalfLifeTime 参数 控制半衰减的周期
      5)编译线程
      6)方法内联 -XX:Inline
      字节码小于325个字节才会内联 -XX:MaxFreqInlinesSize=N
      方法小于35个字节,一定会内联 -XX:MaxInlineSize=N
      7) 逃逸分析
      

    b, GC调优

    1)目的:GC的时间够小,GC的次数够少
    2)调优的原则和步骤:
    3)原则:
      a)大多数的java应用不需要GC调优
      b)需要GC调优的,不是参数问题,是代码问题
      c)GC调优其实是最后的手段,而且是逼不得已才用            
      d)选择合适的GC回收器
      e)选择合适的堆大小
      f)选择年轻代在堆中比重
    4)步骤:
      a)监控GC的状态
      b)分析结果,判断是否要优化                  
      c)miniorGC 时间 <50ms ,10s 一次
      d)fullGC 执行时间1s以下,频率10分钟以上
    5)GC相关参数
        -XX:+PrintGCDetails
        -Xlogger:loggerPath=
        -XX:+HeapDumpOnOutOfMemoryError
        -XX:HeadDumpPath=     
        -XX:PrintHeapAtGC      当发生GC时打印堆的信息
        -XX:TraceClassLoading  类的加载顺序
    
  • 存储性能优化

    1. 尽量使用SSD
    2. 定时清理数据或者按数据的性质分开存放
    3. 结果集处理 mysql: setFetchSize

相关文章

网友评论

      本文标题:JVM(五)深入了解性能优化

      本文链接:https://www.haomeiwen.com/subject/eatyzhtx.html