性能的基本概念
什么叫程序的性能?
程序运行所需的内存和时间。
性能的表现形式:
1.执行速度: 程序的反应是否迅速,响应时间是否足够短。
2.启动时间:程序从运行到可以处理正常业务所需要的时间。
3.内存分配: 内存分配是否合理,是否过多的消耗内存或者存在泄露
4.负载承受能力: 当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓。
衡量性能的基本指标:
1.执行时间:一段代码从开始到结束所需的时间。
2.CPU时间:函数或线程占用CPU的时间。
3.内存分配:程序在运行时所占用内存的空间。
4.磁盘吞吐量:磁盘I/O的使用情况。
5.网络吞吐量:网络的使用情况。
6.响应时间:系统对某用户行为或者事件作出响应的时间。
木桶原理
什么叫木桶原理?
一个木桶能乘多少水不取决于最高的那块木板,而取决于最短那一块。
一个系统的总体性能不取决于系统性能表现最好的组件,而取决于性能表现最差的组件。
什么叫性能瓶颈?
木桶中最短的那一个木板,影响系统的总体性能,系统性能表现最差的组件。
系统的性能瓶颈类型:
根据应用的特点不同,任何计算机资源都有可能成为系统瓶颈。
可能成为系统瓶颈的计算资源:
1.磁盘I/O: 读写速度慢。
2.网络操作: 网络环境的不确定性,会导致网络操作速度慢。
3.CPU: 对资源要求较高的应用,长时间、大量的占用资源,对CPU的争夺也会导致性能问题。
4.异常: 异常的捕获和处理非常消耗资源。
5.数据库: 海量数据的读写操作相当费时。
6.锁竞争: 锁竞争会明显增加线程上下文的开销。
7.内存: 内存大小不足,应用程序只能尽可能的将常用的核心数据读入内存。
Amdahl(阿姆达尔)定律
参考:https://blog.csdn.net/thinkpad_zj/article/details/80240787
定义了加速比与系统并行度和处理器数量的关系
加速比:
加速比 = 1 / ( 串行化比重 + (并行化比重 / cpu数量))
加速比越高,程序性能优化越好。
程序性能优化效果取决于串行化比重和cpu数量,串行化比重越低,CPU数量越多,则优化效果越好。
串行: 只能一个人去做这件事
例如:烧开水,烧一壶开水 ,水开时间要2分钟,你增加多几个人在那里烧,但开水开的时间是不可变的。
并行: 可以多个人去干这件事
例如:扫地,一个人需要2分钟,多加一个人要1分钟,人越多扫地用时越短
性能调优
性能调优的分类:
1.设计调优: 在软件开发前执行,评估系统的潜在问题,规避某一组件的执行问题
2.代码调优: 在软件开发过程中,在软件开发完成后,在软件维护过程中对程序代码进行改进和优化
要求:熟悉相关的语言的API, 对算法,数据结构灵活运用
3.JVM调优: 系统运行期, 设置合理的JVM启动参数
JVM是java软件的运行平台,JVM的各项参数会直接影响java程序的性能。例如:JVM堆的大小、
垃圾回收策略
要求:了解JVM的运行原理和基本内存结构。
4.数据库调优:
4.1 、在应用层对sql语句进行优化
例:在对大量拥有相同结构的查询使用PrepareStatement,不使用statement
在使用select查询时,避免使用星号
4.2、对数据库进行优化
建立具有良好表结构的数据库
例:使用表分区技术,建立索引
4.3、对数据库软件进行优化
例:设置合理大小的共享池、缓存缓冲区
5.操作系统调优
性能优化的步骤
确立性能目标 -----》 对软件进行性能测试 -------- 》若未达到性能目标 ------- 》找出系统瓶颈并改进 ----- 》继续测试 ----- 》直至达到所需的性能目标