性能优化总结

2023-12-13 04:25:41

1.性能优化的目标:

????????1.吞吐量 2.响应速度

????????吞吐量指的是 并行执行的优化

????????响应速度指的是串行执行的优化,通过优化执行步骤

2.性能优化的要点:

? ? ? 1.依据数据而不是猜想

? ? ? 2.个体数据不可靠

? ? ? 3.不要过早优化和过度优化

? ? ? 4.保持良好的编码习惯

3.性能优化的指标

? ? ? 吞吐量指标:QPS;TPS

? ? ? 响应时间:TIME,平均响应时间

4.性能优化的方法

? ? ? ? 性能优化分为业务优化+技术优化

? ? ? ? 优化分类:1.复用优化 2.计算优化 3.结果集优化 4.算法优化 5.计算优化 6.JVM优化

? ? ? ? 1.复用优化

? ? ? ? ? 分为代码复用和数据复用

? ? ? ? ?代码复用指的是编码逻辑上的优化,把重复的代码提取出来,做成公共的方法。也使用使用设计模式完成代码复用和可扩展性。

? ? ? ? 比如使用策略模式去除大量if-else

? ? ? ? ? ? ? 使用责任链模式实现大量的校验

? ? ? ? 数据复用:通常有两种方式:缓冲+缓存

? ? ? ? ? ? ?缓冲指的是写操作,作为数据的暂存,然后批量传输或者写入。实际中的例子比如操作系统的各种缓冲区;kafka客户端的缓冲区,然后批量发送;线程池的队列;消息中间件等

? ? ? ? ? ? ? 缓存指的是读操作,对数据的复用。通常有本地缓存和分布式缓存

2.计算优化

? ? 对计算结果的优化,方式有1.并行执行 2.同步转异步 3.惰性加载

? ?并行执行:充分利用cpu多核特性;模式分为 利用多机执行,多线程

? ?同步转异步:

? ?惰性加载:可以使用设计模式比如单例,代理等

3.结果集优化

? ? ?可以使用压缩,索引,批量,复用进行解决。

5.瓶颈

? ? 通常容易出瓶颈的几个点:CPU,内存,I/O

? ? 5.1CPU

? ? ? ? cpu称为大脑,导致CPU问题常常会有两点:一是上下文频繁切换 二是线程阻塞

? ? ? ?排查方式:

? ? ? ? 1.使用top命令找到最大进程

? ? ? ? 2.使用top -HC 找到最大线程 此时要注意:有两种情况,一是某一个线程一直占用,这说明出现阻塞情况 二是几个线程频繁飙高,这种代表上下文频繁切换,有可能线程在无限创建的可能

? ? ? ? 3.jstack命令进行分析具体线程

? ? ? ? ? 线程阻塞情况:使用命令之后可以看到具体的日志,有两种显示方式:第一是线程阻塞,这种可以找到具体的代码。第二是OOM导致的,因为GC线程和业务线程并行执行,OOM问题在下面进行分析。
? ? ? ? ?上下文频繁切换:这种需要使用jstack命令分析多个线程,判断是否是由于线程频繁创建导致。

? ? ?5.2 内存

? ? ? ? ? 内存分为物理内存+虚拟内存。

? ? ? ? ? 第一种内存被占用满情况,其他资源不够,比如栈空间,方法区?

? ? ? ? ? ?这种情况下可以使用 free命令进行查看内存使用情况。

? ? ? ? ? 第二种OOM问题

? ? ? ? ? OOM问题解决思路:

? ? ? ? ? 1.导出OOM日志

? ? ? ? ? 2.使用工具MAT进行分析

? ? ? ? ? ? ? 第一种情况大对象问题:排查直方图或者折线图。

? ? ? ? ? ? ? 第二种情况内存泄漏:排查泄漏点

? ? ? ? ? ? ? 第三种情况老年代频繁:通常由于年轻代参数设置不够,很多对象没有被销毁导致空间不足。

? 5.3 I/O

? ? ? ?很多中间件的瓶颈就是I/O;即使有各种技术在降低I/O的损耗,还依旧会有这种问题。

? ? ? ?BIO:同步阻塞IO

? ? ? ?NIO:同步非阻塞IO 代表作:Netty

? ? ? ?多路复用:同步非阻塞IO 代表作:redis

? ? ? ?AIO:异步非阻塞IO

? ??

文章来源:https://blog.csdn.net/syath1314/article/details/132733430
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。