最近在极客时间学习性能调优的东西,写个文章,做个笔记,逼自己做一些验证,也算学习有个输出。
一、计算机的哪些资源可能成为系统瓶颈
-
CPU
- 代码递归导致的无限循环;
- 正则表达式引起的回溯;
- JVM 频繁的 FULL GC;
- 以及多线程编程造成的大量上下文切换。
-
内存
- 内存溢出
- 内存泄漏
-
磁盘IO
-
网络
-
代码异常
- 构建异常栈为什么消耗系统性能?
-
数据库
-
锁竞争
二、测试-分析-调优 -
测试:
- 微基准性能测试:对某个接口,某个方法。
- 宏基准性能测试:考虑测试环境,测试场景和测试目标。
- 注意问题:热身问题(JAVA代码的)、结果不稳定(绘个平均曲线图)、多JVM情况(线上多个tomcat的情况)。
-
分析:
- rt、tps;
- cpu、内存、网络IO
- 日志,jvm的gc频率、堆内存分配情况
- 代码问题,数据库等,各个线程池配置等。
-
调优:
- 优化代码
- 优化设计
- 优化算法
- 时间换空间
- 空间换时间
- 参数调优,jvm参数,线程池参数
-
兜底策略
- 限流
- 横向扩容
- 提前扩容
网友评论