性能优化入门介绍

一、开篇

        做好性能优化可以节约资源、提高用户体验、规避风险。在代码开发时候我们要保证有效的编码,在上线前需要对系统进行性能测试,在参考平台上进行压测,在项目上线后,根据日志和监控系统来观测系统性能问题。

二、性能指标

1、操作系统

系统元素指标因子
cpu使用率慢调用;大量线程切换;死循环;
负载慢调用;
内存使用率内存溢出;内存泄漏;
磁盘读写次数
网络     带宽
传输次数小报文
吞吐量

2、业务系统

                     

指标因子
吞吐量 - tps/qpsI/o模型
延迟时间慢sql

三、如何做性能优化

1、编码优化

        根据二八定律,往往20%的代码执行会占据80%的资源,优化时候需要针对导致性能瓶颈的代码进行优化。

        举个例子: 我们在日常工作中,有些业务逻辑是从db中获取数据,然后在jvm内存中进行过滤。这样很容易造成oom,过滤逻辑应该直接由db实现,然后加载过滤后的数据到内存中。

2、锁机制优化

        相对于使用悲观锁,如mysql 事务对应行锁,使用乐观锁机制可以极大优化性能。例如在日常库存扣减业务中,基于乐观锁和版本号机制可以实现不需要mysql事务实现。

3、线程池优化

        需要区分业务时i/o密集型还是cpu密集型设定线程数量。

        具体的线程数量: N(CPU核数)*(1+WT(线程等待时间)/ST(线程时间运行时间)

 4、慢sql优化

        sql语句执行的快慢主要和扫描行数/进行磁盘io的次数有关。

        对于多条件查询,需要给基数大的查询条件加上索引。

        全表扫描需要加上limit限制,可以根据服务器和id进行取余获取。

5、内存优化

      a.对象拷贝/复制

           对象拷贝需要使用浅拷贝方式,之前由遇到过写的序列化工具类,先将source转成json字符串 ,后再json字符串序列化成target,这种方式特别耗内存。应该改成基于反射进行setter/getter操作。

      b.内存计算改为数据库计算

      c.内存溢出

           最常见的内存溢出是map数据结构,每次执行都会往map中写数据,但是没有清除逻辑。

6.慢调用优化

        1、同步调用改成异步调用,后续接收远程响应事件。

                在一些交易场景中,售后操作往往都是异步的。

        2、并行调用。

                基于future-listener机制,发起并行调用。

        3、使用缓存机制。

        4、添加超时机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值