性能调优三步走

在性能调优前,我们首先需要制定性能调优目标(响应时间和TPS),这个可以根据业务场景,线上服务器集群配置等来确定。确定好目标就可以准备数据、压力测试脚本了,这些都完成后就一个一个场景进行测试,对不能达到目标的场景再寻找瓶颈所在,那么如何来找到瓶颈呢?概括来说就是使用排除法,比如说在应用程序层面,可以将怀疑有性能瓶颈的代码注释起来,再跑一次测试脚本,看响应时间和TPS的变化,直到找到最终瓶颈所在的代码块。

 

        调优时可以从以下三个层面入手:

1.       应用程序优化

应用程序优化主要指的是从应用代码层面来优化,包括前端,也包括DB

 

避免线程同步

单个请求响应时间很快,多个请求并发时响应时间急剧上升,就要格外注意使用了线程同步的方法或者代码块。

 

缓存

对于系统配置,用户信息等访问频繁又不常修改的数据可以考虑缓存,减少对DB的查询压力,决定是否需要设置缓存时主要看缓存命中率。

 

异步处理(线程池,异步请求)

对于请求并发数比较大,不需要实时返回请求处理结果时可以考虑采用线程池异步处理,需要注意线程池的配置参数(如核心线程数,任务队列数等);而有一些页面数据请求操作逻辑比较复杂,可以先拆分成多次小的操作,异步请求以提高用户体验。

 

DB(连接池设置,多数据源,sql执行计划优化,索引优化)

连接池设置在应用程序中是必不可少了,需要注意最小最大连接数的设置;当获取数据库连接出现瓶颈时,可以考虑设置多个数据源,但总的连接数和单个数据源的连接数保持一致;在执行压力测试前sql要请DBA review,建立相应的索引,测试过程中还要对执行很慢的sql进行优化。

 

2.       系统结构优化

系统结构优化指的是从系统部署机构上进行优化。

 

静态资源和动态页面分开

静态资源(jscssimg等)单独部署,和动态页面(vmjsp等)通过域名区分开,需要关注静态资源的缓存策略设置。

 

应用服务器集群

可以根据不同的应用场景分别设置集群,比如web机集群(负责页面的请求处理),接口机集群(负责第三方系统的请求处理),任务机集群,静态资源服务器集群,这样在优化的时候就可以有所区分和侧重。

 

数据库集群

包括主库和备库,当数据量非常大时需要考虑分库保存,有水平切分和垂直切分。

 

3.  网络优化

   网络优化主要指的是从减少网络开销上进行优化。

 

保证处在同一网段

服务器尽量保证处在同一网段,减少路由解析时间。

 

    上述2和3在性能调优前一般都已经确定了,所以主要工作都集中在1上,在调优过程中,除了关注调优目标之外,还需要注意I/OCPU和内存变化,以及load值,这些都在一定程度上会暴露瓶颈。性能调优既需要有大局观,又需要有深度,这个还要我们在实践中不断积累、总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值