软件的优化(一)总体

一、基本概念

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等    

原文地址:https://www.cnblogs.com/mlfz/p/13229207.html