Tuning
Java 性能调优主要从 Java 编程、多线程、JVM、设计模式、数据库等多个方面来介绍。
不过在调优之前先需要了解性能指标、性能测试、常用手段等,见下文。
性能指标
性能参考因素
CPU:计算型引用、FullGC、无限循环、多线程大量上下文切换都可能造成 CPU 繁忙。
内存:
磁盘 I/O:
异常:构建异常栈非常消耗资源。
数据库:
锁竞争:
指标
响应时间:
数据库响应时间
服务端响应时间
网络响应时间
客户端响应时间
吞吐量
磁盘吞吐量
IOPS:随机读写,如 OLTP 数据库、小文件存储等。
吞吐量:顺序读写,如视频点播等。
网络吞吐量:涉及 CPU、网卡、宽带等。
计算机资源使用率
CPU 占用率
内存使用率
磁盘 I/O 使用率
网络 I/O 使用率
系统负载
系统负载 vs CPU 利用率。系统负载表示正在运行或等待的进程或线程数,CPU 利用率表示单位时间内实时占用 CPU 的百分比。如计算密集型,CPU 利用率会很高,但是系统负载可能为 0.1;I/O 密集型,CPU 利用率可能很低,但是系统负载很高,因为很多线程可能在阻塞。
TPS vs QPS。TPS(transaction per second),QPS(query per second)。一个事务可能包含多个请求,若一个用户操作只有一个请求,那么 TPS 和 QPS 就没有区别。
性能测试
微基准测试
宏基准测试
性能测试注意的问题:
热身
结果不稳定
性能优化
代码
设计
算法
时间换空间
空间换时间
参数调优
兜底策略
限流
熔断
自动扩容
提前扩容
性能测试工具
工具 | 适用场景 | 优点 | 缺点 |
ab | 单个接口的性能测试 | 简单实用 | 不能对整个业务流程测试 |
JMeter | 简单并发测试、整个业务流程测试、组合并发测试、csv 动态导入变量 | 功能全,可扩展性高 | 性能不稳定,高并发容易造成界面卡死 |
LoadRunner | 包括JMeter 的常用功能,可以 IP 欺骗 | 专业、稳定、高效 | 价格高 |
Last updated