如何进行系统性能优化

前言

不战而屈人之兵,善之善者也

性能优化的第一原则是,通过测试,日志,profiling 分析出哪有问题,然后有的放失。

性能优化时持久战,在深入理解业务后,结合系统响应,系统吞吐,系统并发量指标,对系统进行优化

一般来说,一个系统有性能问题: 有可能是一下几方面: CPU, 内存, IO(磁盘IO,网络IO).

性能优化的目标是追求合适的性价比。

性能优化前,需要深入的理解业务,代码是为了业务服务,服务于最终用户。

性能优化,可以在需求阶段,设计阶段,实现阶段。

高手总是花80%时间用来思考, 20%时间实现。

需求阶段,如果可以达到一样的目的,但是用更优方式解决, 这样稍微调整需求的基础上,能大大解决程序性能问题。

设计阶段: 架构设计,技术选型,接口设计等,这些设计如果做了不好,后续也很难优化。

实现阶段: 一个函数的,一段代码的好坏,也会影响后续的优化,静态的优化,编译时的优化,运行时的优化等。

说完了道,谈谈术。

阿里巴巴 Java 开发手册(华山版).pdf

  • https://00fly.online/upload/alibaba/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E5%8D%8E%E5%B1%B1%E7%89%88%EF%BC%89.pdf

性能优化方法

代码优化

看看代码是否有如下问题:

  • for 循环是否过多
  • 是否做了很多无谓的条件判断
  • 做了重复逻辑

go 中有 pprof 工具
一般这个可以结合火焰图区观察

python 有一些 profile 结合性能分析

import profile
def a():sum = 0for i in range(1, 10001):sum += ireturn sumdef b():sum = 0for i in range(1, 100):sum += a()return sum
if __name__ == "__main__":profile.run("b()")

数据库优化

SQL 优化

  • 可以通过 explain工具来进行调优

连接池优化

  • 查询优化
  • 连接池优化, 为了英语实现数据库连接的高效获取, 对数据库连接的限流,一般来说,一个应用节点,通常会当前使用连接池方案。 连接池优化,一般需要结合连接池原理连接池监控参数当前业务量,决定最终的调优参数。。

case1 :

连接池优化,还有一种链接保活的问题:我们连接池往往有这么一种机制,当一个连接不用时,我们会将这个连接进行回收,但是我们的流量往往是潮汐流量,或者瞬间放大,此时,再去建立连接,就会造成网络 IO 问题,这个时候,就可以考虑保活了,避免被回收。
保活方案

case2

适当的提高 KeepAlive 时间,往往有奇效,系统 cpu ,IO 消耗有下降
在这里插入图片描述

分库分表

  • 读写分离
  • 多从库负载均衡
  • 集群
  • 水平和垂直分库分表

缓存优化

没有什么性能问题不是缓存解决不了的。如果有,就再加一顿,不, 是加一级缓存 !!!

缓存的本质是加速访问,访问的数据,要么是其他数据的副本,要么是之前计算结果(避免重复计算)

缓存是以空间换时间。

缓存,我们会想到,本地缓存(HashMap/ConcurrentHashMap, Ehcache, Guava Cache)

也会想到一些中间件 Redis/Tair/Memcahe

一般有如下方案:

  • 本地缓存代替 redis 缓存,或者代替查库,定时将缓存定时到存储到本地缓存
    – 定时刷新本地缓存大的问题,可以采用增量刷新的方式
  • redis key 过多问题,考虑是否可以将key 做一些分组,类似分表逻辑, 采用 hset 的方式,进行分组设置读取,防止 因为活动数,导致 key 暴增

但缓存也不是万能的,需要考虑如下问题

  • 缓存的一致性问题,特别是分布式系统中强一致性的场景
  • 缓存穿透,缓存击穿等问题
  • 什么时候更新缓存,缓存的更新时效问题
  • 缓存丢失怎么办?

case1

比如有这样一个场景: 在线流量要一直从 redis 中获取缓存,这样会导致访问 Redis QPS 陡增,流量放大,这样我们可以考虑加一层缓存。

在这里插入图片描述

并发

一个线程或者说一个协程goroutine干不完,可以启多个协程干。并发提高了系统的吞吐,又减少用户的平局等待时间。

多个协程或者多个线程处理用户请求,可以充分利用多核 CPU 。
还有 IO的时候,也用多线程,NIO,其实也是一种并发。

批量

有网络IO,磁盘 IO 时候,需要合并操作,批量操作,往往可以提升吞吐,提高性能。

每次读取数据的时候,批量读,防止频繁建立 IO 连接。因为当涉及到网络请求是,网络传输的消耗往往大于处理时间。

比如 mysql 中的批量插入, redis 中的 pipelinemongodbbulk operation

异步

梳理业务逻辑,非必要业务流程,可以采用一步处理。
异步也是一种优化方式,针对接口,可以做一些请求附属,非主要流程的事情。

  • 可以缩短接口响应时间, 加快用户请求,用户体验提升
  • 避免线程长时间运行等待阻塞,占用系统 CPU, 内存等机器性能。

异步的方式一般如下:

  • 新起一个线程去做一些事情,比如启动一些线程去查并行调用其他接口,等其他接口返回后,主接口组装结果返回即可
  • 也可以使用 MQ , 天生的异步处理方式,不关系处理结果,将数据发送 MQ ,交给其他系统来处理即可, 把当前的响应直接返返回,要注意的是,主接口可以不关心 MQ 处理结果,直接返回。
  1. 能缓存到本地内存的尽量缓存
  2. 能过滤掉大部分请求的条件,提前过滤
欢迎关注工作号:程序员财富自由之路

在这里插入图片描述

参考资料

  • https://www.cnblogs.com/xybaby/p/9055734.html
  • https://tech.meituan.com/2016/12/02/performance-tunning.html
  • https://xargin.com/go-perf-optimization/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619110.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

win10计算机系统优化设置,win10系统优化系统的详细办法

作为大多数用户都使用的win10系统,如果发生对win10系统优化系统进行设置情况,会让人束手无策,那么win10系统优化系统是怎么设置的呢?如果有朋友想对win10系统优化系统进行设置的话,按照1、右键点击“此电脑”&#xff…

系统优化的方法有哪些

对于很多人来说,系统优化可能只是个概念,真正想要操作的时候却又无从下手,然后一个不小心把系统搞崩溃了又凉凉。下面就和大家简单聊聊系统优化应该从哪几个方面去操作吧。 更多系统教程尽在小白系统重装官网 系统:win10专业版 …

八 在IDEA中设置省电模式

如下图所示,IntelliJ IDEA 有一种叫做 省电模式 的状态,开启这种模式之后IntelliJ IDEA 会关掉代码检查和代码提示等功能。所以一般也可认为这是一种 阅读模式,如果你在开发过程中遇到突然代码文件不能进行检查和提示,可以来看看这…

嵌入式linux更省电,- 基于嵌入式Linux的智能手机省电设计

用户程序API, 用户程序( 应用软件) 分为三类: (1)可感知电源管理的应用软件; (2)可感知电源管理的“包装器”中的传统应用软件; (3)不带电源管理的传统应用软件。 可感知电源管理的应用软件能够充分利用来自策略管理器的API, 从而建立各自的基…

一级节能和三级节能有什么区别

等级不同:一级节能产品能源效率达国际先进水平,三级的为市场平均水平。能耗量不同:一级和三级节能产品全年耗电量分别为634度781度。省电程度不同:同规格产品在同样条件下,一级节能产品比三级的节能15%左右。 以变频空…

计算机系统节能减排,节能减排,我们怎么做?

原标题:节能减排,我们怎么做? 节能减排 节俭但不算计,环保但不做作 节能环保已被越来越多的人接受 形成了一种特定的文化 保护环境并没有想象中的那么难 只要我们从小事做起 就会让地球母亲焕然一新 空用完拔插头,省电…

android屏幕省电,AMOLED屏幕省电吗 AMOLED屏幕耗电测评测

毫无疑问屏幕是最能够直接影响用户体验的部件之一,而关于AMOLED屏幕好还是LCD屏幕好的争论也从未停止。与LCD屏幕相比,AMOLED屏幕的最大优点之一便是在显示黑色或深色颜色时更加节能,但事实的确如此吗?而从Greenhot给出的结果来看…

计算机省电模式在什么地方,计算机打开并显示省电模式应该怎么办

打开计算机电源后,始终会显示省电模式,然后屏幕始终是黑色,并且无法访问系统。如果在打开计算机电源时显示省电模式,该怎么办?今天,我将讨论打开计算机电源时的省电模式解决方案。方法。 计算机打开时显示的省电模式解决方案1 ​​ 1)显示器电源关闭,或显示器数据电缆接…

Linux内核省电社区,【整理】Linux禁用CPU省电状态/Linux系统性能调优 | 勤奋的小青蛙...

为了提升CPU性能,我们要禁用CPU省电状态。 我们强烈推荐禁用CPU的省电模式, 进行此更改可能会导致功耗增加,但会提高稳定性和性能。 那么:如何在Redhat或Suse Linux系统上禁用CPU节能状态? 对于RedHat Linux(版本7及更…

计算机主机省电模式,打开计算机显示屏后即显示省电模式,如何处理

2442396444 本文适用于HP和Compaq台式计算机使用的HP和Compaq平板显示器。 计算机启动,关闭或进入节能模式时,显示屏上会显示一条消息。显示的信息可能是: 进入睡眠状态(正在进入睡眠模式) 未检测到信号(未检测到信号) 同步超出范围(同步超出…

计算机关闭节能模式,bios怎么关闭cpu节能模式_bios节能模式怎么设置

BIOS是英文“Basic Input Output System”的缩略词,直译过来后中文名称就是“基本输入输出系统”。在IBM PC兼容系统上,是一种业界标准的固件接口。BIOS这个字眼是在1975年第一次由CP/M操作系统中出现。BIOS是个人电脑启动时加载的第一个软件。 其实&…

802.11 Power Save(节电/省电/节能)机制总结

背景介绍 了解WIFI节能的机制之前,首先要了解WIFI能耗的消耗发生在什么状态下,显而易见,发送和接收肯定是消耗能量的,还有一点是要认识到的,Power Save通常是在STA端进行的,AP需要一直广播并且很多AP都是固…

ctfshow-web-红包题第七弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先上来访问就是phpinfo。常规思路先扫一下目录。 发现一个.git文件403,这种情况通常都是存在文件夹,但是不能直接访问文件夹导致的。那么我们可以使用git_extract工具进行获取内容。…

SIP 协议路由规则详解

文章目录 SIP 路由关键字段SIP 路由图解 SIP 路由关键字段 SIP 协议实际上和 HTTP 类似,都是基于文本、可阅读的应用层协议,二者的不同之处在于 SIP 协议是有状态的。在 SIP 协议中,影响报文路由的相关字段如下表所示,总结起来如…

字体试衣间--轻松管理你的字体

2007年10月07日 14:44:00 PS达人们一般都收集有很多素材,字体便是其中之一,而且还颇为重要。硬盘上存有几百种字体是常事,即使上千,也不奇怪。但这么多字体,管理起来就很成问题了。 因此,今天给大家推荐这个…

NGINX相关配置

NGINX相关配置 NGINX配置信息 nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分: 主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { wo…

鸿蒙无锡有什么特产,无锡特产都有哪些,你知道吗

到外地旅游,我们总是不厌其烦的将当地的特产往家带。那么去到无锡,你应该带什么特产呢?“太湖明珠”无锡是江南鱼米之乡,物产富饶,无锡特产多种多样,是外地人了解无锡文化的重要载体。让我们来盘点一些无锡…

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城 (采写记者:刘明洋、段续、刘慧、郭翔、于佳欣)新华网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国稻种芯中国水稻网 中国三农智库网-功能性农业农业大健康大…

前端需要理解的工程化知识

1 Git 1.1 Git 常见工作流程 Git 有4个区域:工作区(workspace)、index(暂存区)、repository(本地仓库)和remote(远程仓库),而工作区就是指对文件发生更改的地方&#xff…

LeetCode——回溯篇(一)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 39. 组合总和 40. 组合总和 II 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的…