性能优化总结
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
? ??
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!