首页 常用性能指标
文章
取消

常用性能指标

JVM调优的目的

其实“调优”是一个诊断和处理手段,我们最终的目标是让系统的处理能力,也就是“性能”达到最优化

如何进行JVM调优

大致过程如下:

  1. 量化性能相关指标,然后对系统问题进行排查
  2. 排查出问题,如:系统延迟和抖动增加,偶尔宕机,这说明JVM配置不合理
  3. 针对问题对症下药,如:针对配置不合理的问题,我们需要对JVM配置进行调整,如果问题比较严重是否进行系统重构和调整,同时提出对日常运维的要求和建议
  4. 最后经过我们的调优,系统延迟降低,不在抖动,不再宕机

量化性能相关指标

量化性能指标是一个标准化判断依据的过程,根据量化性能指标我们能够有效指出那些指标与平常不同存在问题

要排查问题,那么我们就要直到哪里出了问题,一般我们需要对下面这些方面进行排查:

  1. 分析系统性能问题: 比如是不是达到了我们预期性能指标,判断资源层面有没有问题,JVM 层面有没有问题,系统的关键处理流程有没有问题,业务流程是否需要优化;
  2. 通过工具收集系统的状态,日志,包括打点做内部的指标收集,监控并得出关键性能指标数据,也包括进行压测,得到一些相关的压测数据和性能内部分析数据;
  3. 根据分析结果和性能指标,进行资源配置调整,并持续进行监控和分析,以优化性能,直到满足系统要求,达到系统的最佳性能状态。

计算机系统中,性能相关的资源主要分为这几类:

  1. CPU:CPU是系统最关键的计算资源,在单位时间内有限,也是比较容易由于业务逻辑处理不合理而出现瓶颈的地方,浪费了CPU资源和过渡消耗CPU资源都不是理想状态,我们需要监控相关指标;
  2. 内存:内存则对应程序运行时直接可使用的数据快速暂存空间,也是有限的,使用过程随着时间的不断的申请内存又释放内存,好在 JVM 的 GC 帮我们处理了这些事情,但是如果 GC 配置的不合理,一样会在一定的时间后,产生包括 OOM 宕机之类的各种问题,所以内存指标也需要关注;
  3. IO(存储+网络):CPU在内存中把业务逻辑计算以后,为了长期保存,就必须通过磁盘存储介质持久化,如果多机环境、分布式部署、对外提供网络服务能力,那么很多功能还需要直接使用网络,这两块的 IO 都会比 CPU 和内存速度更慢,所以也是我们关注的重点。

性能优化中常见的套路

性能优化一般存在瓶颈问题,而瓶颈问题都遵循80/20原则,即把所有的整个处理过程中比较慢的因素都列一个清单,并按照对性能的影响排序,那么前 20% 的瓶颈问题,至少会对性能的影响占到 80% 比重。换句话说,我们优先解决了最重要的几个问题,那么性能就能好一大半。

一般我们像排查性能资源是否称为瓶颈问题,看资源够不够,只要成本允许,加配置可能是最快速的解决方案,还可能是最划算,最有效的解决方案。 与 JVM 有关的系统资源,主要是 CPU 和 内存 这两部分。 如果发生资源告警/不足, 就需要评估系统容量,分析原因。

衡量性能的维度

  1. 延迟,一般指响应用户请求的平均时间,但是响应时间一般抖动的特别厉害(即部分用户的响应时间特别高)这时我们一般需要保证95线或99线,即保证95%或99%以上的用户在可接收的范围内响应,另外在用户请求量巨大的时候,最大响应时间可能变得非常大,所以最大响应时间这个指标一般不可靠,我们一般不用
  2. 吞吐量:一般对于交易类的系统我们使用每秒处理的事务数(TPS)来衡量吞吐能力,对于查询搜索类的系统我们也可以使用每秒处理的请求数(QPS)。
  3. 系统容量:也叫做设计容量,可以理解为硬件配置,成本约束

一般只要系统架构允许,增加硬件配置一般都能提升性能指标,但随着摩尔定律的失效,增加硬件配置并不能得到线性的性能提升,比如增加一倍的内存容量并不能带来一倍的性能提升,所以目前来说,整体上使用分布式的解决办法,以及局部上对每个系统进行分析调优,是性价比最高的选择。

同时性能指标还可以分为两类:

业务需求指标:如吞吐量(QPS、TPS)、响应时间(RT)、并发数、业务成功率等。 资源约束指标:如 CPU、内存、I/O 等资源的消耗情况。

一般批处理/流处理系统更关注吞吐量, 延迟可以适当放宽,而高可用 Web 系统,既关注高并发情况下的系统响应时间,也关注吞吐量

性能调优的手段

我们可采用的手段和方式包括:

  • 使用 JDWP 或开发工具做本地/远程调试
  • 系统和 JVM 的状态监控,收集分析指标
  • 性能分析: CPU 使用情况/内存分配分析
  • 内存分析: Dump 分析/GC 日志分析
  • 调整 JVM 启动参数,GC 策略等等

总结

总结

性能调优的第一步是制定指标,收集数据,第二步是找瓶颈,然后分析解决瓶颈问题。通过这些手段,找当前的性能极限值。压测调优到不能再优化了的 TPS 和 QPS,就是极限值。知道了极限值,我们就可以按业务发展测算流量和系统压力,以此做容量规划,准备机器资源和预期的扩容计划。最后在系统的日常运行过程中,持续观察,逐步重做和调整以上步骤,长期改善改进系统性能。

注意:过早的优化是万恶之源,不能脱离实际应用场景做优化,虽然目前的性能不是很好,但能满足实际生产,那么就没必要做优化,除此之外当系统的性能优化到 3000TPS 如果已经可以在成本可以承受的范围内满足业务发展的需求,那么再花几个人月优化到 3100TPS 就没有什么意义,同样地如果花一倍成本去优化到 5000TPS 也没有意义。

因为考虑到实际生产,那么就要综合考虑成本和性能的平衡

本文由作者按照 CC BY 4.0 进行授权