系统性能优化,从何入手?

写在前面:系统性能优化,是个细活、累活,需要不断的斗智斗勇,才会有满意的效果。

真实场景

一大早,就接到了甲方爸爸的电话:
“我们的系统(APP)卡了,赶紧看看怎么回事?!”
通常接到这种反馈,我的操作通常是这样的:
感觉拿起手机,打开app,一波操作下来,发现并没有特别卡顿的情况啊!
于是回复客户:您切换个网络试试呢?
用户切换网络之后,有时候就真的不卡了。
但没多久,又是反馈卡的问题。
终于有一天,在我们上线了一个功能不久,APP彻底歇菜了,无论什么功能,都刷不出来。
由此,我们进入了长达几周的系统优化之路。

系统性能定义

要谈性能优化,首先要明确性能的概念。
究竟什么样的系统,算是性能好的系统?
系统优化成什么样,才算是合格呢?
性能指标确定了,才能谈优化的问题。
系统性能就两个事:

  1. Throughput ,吞吐量。也就是每秒钟可以处理的请求数、任务数或事务数(TPS)。它的单位一般是TPS、每单位时间写入磁盘的字节数等。
  2. Latency, 系统延迟。也就是系统在处理一个请求或一个任务时的延迟。它的单位一般是ms、s、min、h等。
    一般来说,吞吐量越大,延迟就会越高。延迟越低,能支持的吞吐量就会越高。
    举个例子:
    我的系统能支持100万的并发,但延迟要2分钟,那这样说毫无意义的。用户不会在一个页面等2分钟去完成。

性能测试

明确了指标,就需要我们先来收集系统的这两个数据。
首先,要定义Latency的值。这个需要根据不同的业务做出定义。比如,购买订单的业务,会员能接受的范围为5s以内,对于实时性比较高的业务,可能在1s以内。
其次,进行性能测试。这里要祭出我们的常用性能测试工具,常见的有loadrunner。想要知道能更多的压测工具,关注公众号,回复:性能工具
在这里插入图片描述

定位性能瓶颈

1. 查看服务器操作系统

系统有问题时,不要急于调查我们的代码。代码问题只是其中的一环,很多时候是不需要动代码的。
我们首先要看的是操作系统的情况:
cpu利用率、内存使用率、网络IO、链接数等等。windows系统下,这些都可以在【资源监视器】里查看到
在这里插入图片描述

先看CPU利用率,如果利用率不高,但是系统的Throughput和Latency上不去了,说明程序并没有忙着计算,而是忙着其他的事情,比如IO。
IO和CPU一般是反着来的,CPU利用率高则IO不大,IO大则CPU就小。关于IO,主要是这几个:磁盘文件的IO,驱动程序的IO,内存换页率,这3个都会影响系统性能。
通过查看这些内容,我们才能知道到底是哪块的性能问题:比如内存不够、CPU占用过高,等等。
很多时候,不需要程序员改代码,仅仅换下硬件或者操作系统的配置就可以了。

常见的性能问题

  • 二八原则

根据二八原则,通常是20%的代码消耗了80%的性能。在实际项目中,甚至是10%的代码占用了90%的性能。因此,找出关键代码,才是解决问题之道。

  • 简化代码

比如,减少循环的层数、减少递归、小心使用异常等等,不同的语言中,已经有了很多常见的使用注意事项。

  • 数据库调优

在并发情况下,锁是非常影响性能的。性能最高的是不要锁,所以,分库分表,冗余数据,减少一致性事务处理,可以有效的提高性能。

  • SQL语句优化

避免全表检索。比如,select * from tb_Customer
这样的语句,线性复杂度O(n),记录数越多,性能就越差。
索引。
最好不要在索引字段上做计算、类型转换、函数、空值判断、字段链接等操作,这些操作都会破坏索引原本的性能。
在where和OrderBy中,不要进行计算操作,或者用NOT之类的函数。
多表查询。
sql中切忌使用多层的嵌套语句,在数据量大的时候,性能很容易出现问题。

不是结语:关注我【天行健说】,获取更多的优化姿势。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值