软件的优化(一)总体
一、基本概念
1、软件系统质量特性
安全性:同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。
健壮、可靠:软件系统在一定的时间内无故障运行的能力、容错能力、恢复能力
可扩展、可维护、可移植:正在运行的软件系统以适应新需求、变化了的需求的难易程度
可用性、易用性、性能:性能是指软件及时提供相应服务的能力。 具体而言, 性能包括速度、 吞吐量和持续高速性三方面的要求 。
以上特性也是我们优化最终提高的目标。
2. 性能的定义及表现
定义:多快给用户想要的结果;主要考察流畅度和更少的资源占用两个方面
表现:一些页面加载超过3秒,就会影响用户体验,从而流失用户,所以我们的业务计算结果越快出来越好
3、查看范围
CPU负载/利用率:如果CPU负荷过高说明目前CPU资源是不足的。那么在后续的[分析程序的数据结构与算法]阶段,你需要优化运算逻辑如设计更合理的并行线程数量(通常是cpu核数×2);或者你可以直接增加CPU资源(scaleup);
内存占用:如果内存占用过高,可能会导致交换到swarp区,进而导致性能下降。那么在后续的[分析程序的数据结构与算法]阶段,你需要优化程序设计,比如减少缓存使用,及时释放内存等;或者你可以直接增加内存(scaleup)。
磁盘IO:磁盘IO过多会导致性能表现下降,严重时会导致相关线程阻塞。那么在后续的[分析程序的数据结构与算法]阶段,你可以考虑优化程序设计,减少IO量,减少小文件读写频率,增加缓存等等;或者你可以直接置换磁盘为SSD(scaleup)。
网络IO:网络IO过多可能会被网络带宽限制,导致传输速度受限。那么在后续的[分析程序的数据结构与算法]阶段,你可以优化程序设计比如减小通信量;或你可以直接增加带宽(scaleup)。
二、优化遵循的原则
1、性能是平衡之道
即在有限的资源下,提供最佳的访问能力及处理速度。木桶原理之:发现最差瓶颈,提升整体效率。呑吐量和响应速度兼顾。
2、调优是量体裁衣
根据不同的场景,针对性的提高适用性。如:前台的响应速度,后台的统计结果。前者用户耐心有限,后者需要丰富数据分析。
三、优化范围
硬件:
cpu的处理能力、缓存空间的大小、硬盘io能力、网络带宽等
软件:
1、JVM
2、部署的容器(tomcat、jetty、jboss等)
3、数据库(Mysql、SqlSever、Oracle、PostSQL)
4、软件本身(代码质量、处理并发的能力、静态资源过大、数据库连接配置等)
监控
Linux监控:top、df、free等
JVM监控:jstat(jvm统计监控)、jstack(堆栈跟踪工具)、jmap(内存影像工具)、jhat(jmap快照分析工具)等
软件监控:Prometheus+granfana监控、skywalking等