性能优化的几个维度

性能优化有迹可循,我们可以按照不同维度进行针对性的优化,在维度划分上可以分为如下三个维度。

第一维度:应用程序层面

1. 缓存

缓存的数据结构设计很重要,没有一种数据结构是万能的。数据结构设计得越简单、单一,缓存数据的二次运算就越多。

此外,如果缓存的数据量很大,就要增加一个缓存淘汰算法,否则会白白浪费大量内存资源。

2. 异步

异步有两种方式:

线程异步。

主要用于涉及到 I/O 的地方,像磁盘 I/O 和网络 I/O;

MQ异步。

适用于更大的场景,通过 MQ 进行异步可以大大提高性能。

3. 多线程并行和分布式并行

线程不要分得太多,否则管理成本会高,分布式系统中也存在管理成本。

4. 延后运算懒加载

这个和缓存的思路相反,它适用于一些低频、运算耗时的数据。

5. 批量,合并,归并

如果要短时间内频繁地传递多个数据到同一个目的地,尽量打包到一起,一次性传输,特别是I/O 的场景。如果系统是一个单点系统,将数据打包传输的性价比会非常高。

应用程序层面的优化方式还有很多。比如,用长链接代替频繁打开关闭的短链接、压缩、重用等等。

第二维度:组件层面优化

组件是指那些非业务性的东西,如中间件、数据库、运行时的环境(JVM、WebServer)等。

数据库的调优可以分为:SQL 语句、索引、连接池。

运行时的环境调优时,对 JVM 的调优主要是调优 GC 相关的配置,对 WebServer 的调优主要是针对连接相关的调优。

第三维度:系统层面调优

借助系统层面的一些技术指标,来观测并判断程序是否正常。比如,CPU、线程、网络、磁盘以及内存。

CPU 方面,大多数情况下关注这三个指标就够了:CPU 利用率、CPU 平均负载、CPU 上下文切换。

线程方面,除了线程数之外,还需要关注一下处于“挂起”状态的线程数量有多少。数量越多,意味着程序里锁竞争越激烈,需要通过其它方案来缩小锁的粒度、级别,或者避免用锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值