概述

Ø性能优化的思路

首先是较为精准的定位问题,借助于相应的工具包,分析系统性能瓶颈在哪,在根据其性能指标,以及所处于层级决定选择优化的方式方法。在选择优化的方式方法时,大家可以参照以下章节调优方法,架构优化递进,进行正确的,有针对性,有步骤的优化。可能会发现部分指导思想或许有相悖嫌疑,大可不必较真,系统优化的过程本身就是一个不断分离+共享的组合拳,至于具体选择哪种优化方式,根据具体需求来定,但大型应用发展的总体思路是不断分离,在通过索引(非数据库)进行关联起来,

切记:优化一定要对系统进行细致的望闻问切,找到性能问题根源切入点,而不被表象迷糊,对症下药,发现病症所在的医生并不比操作手术刀的医生水平差。本文有工具包一章节,对于需要做优化的人员,需要熟悉,他就是我们诊断所用的CT,例如我们发现内存高了,首先想到不是内存不够用,而是为什么如此消耗内存,用工具看看内存消耗在什么地方,试想之,如在医院,病人告诉医生,他心脏不好,医生就换心脏,那样的话,每个人只要熟练掌握菜刀,都可以做医生

Ø迭代优化

性能优化未必一次性就能满足的,可能此处瓶颈消失了,系统一旦运转快速后,在其他地方又发现新的性能瓶颈,所以性能优化是一个迭代的工作。直至满足系统需要的性能指标。

Ø优化的成本

系统性能设计或优化是否可以一步升天,按照最好的分布式架构进行设计和优化呢,单个节点一直也运转及其健康,理论上是可以达到共产国际的,但实际实施层面不可取,必须结合实际的非功能需求进行设计和优化,一则一步到极致的话,系统的成本太过虑庞大,光是性能设计和优化的成本就高于系统本身给客户所提供的价值,也造成研发成本开销过大。二则好像能够架构这样完美系统的人还没诞生。所以一句话也同样适合架构师:有理想而不理想化,废话少扯:具体见法则

调优方法

数据库优化

很多应用,优化DB往往是最直接,最方便,见效最显著的,但并非所有的系统性能都处在瓶颈,或者DB瓶颈解决之后,可能应用层瓶颈,WEB层瓶颈,甚至架构瓶颈都会冒出来了,所以数据库优化十分重要,但往往很多人理解系统优化就是数据库优化,是不全面的。优化角色一般推荐具备较深数据知识的程序员,或者专业的DBA,而不只是会CRUD开发人员

Ø建立正确的主键,外键,以及索引

Ø分离原则:读写分离,业务数据分离

a)分库

b)分区

c)分表

d)分列(将大字段,不常用的隔离到他表,按需查询)

Ø选择隔离级别:某些对数据一致性要求不高的,可以牺牲部分一致性,降低加锁阻塞

Ø保证事务简短以及减少不必要的锁机制。

Ø查询优化规则:

e)避免表内的相关子查询;

f)避免排序或为尽可能少的行排序,

g)做大量数据排序时相关数据放在临时表中

h).尽量在where后多传查询条件,以减少不必要返回的行

i).尽量select只需要的字段,以减少不必要返回的列

Ø分页存储过程:大列表的查询也可以利用分页存储过程达到优化效果。

Ø利用数据库缓存,视图,临时表等最大程度优化系统,并对存储过程和函数进行必要的优化

Ø如有需要,可以冗余表中字段,避免联合查询

Ø如有需要,也可以将表内的大字段分离到单独表中,使其单独查询

Ø必做多表关联时,尽量过滤不符条件表中数据,减少笛卡尔积计算量

Ø复杂表表:如实时性要求不高,尽量后台任务计算,避免动态查询

应用层优化

应用层优化侧重于应用层本身的逻辑优化,算法优化,代码优化等,优化的角色可以是熟悉应用的程序员

Ø优化算法,选择合适高效的算法,降低不必要的递归,循环、多层循环嵌套等计算

Ø避免申请过多的不必要的内存开销

Ø降低内存泄露(using,Dispose,弱引用,Finalize)

Ø使用频率较低的大文件,大对象,大数组等使用完毕后,及时释放

Ø使用频率较高的大文件,大对象,大数组尽量缓存

Ø考虑多线程技术

Ø选择适当的通信方式:长连接,短连接,有以下方式Socket、Remoting、Web Services(Rest,Soap)、WCF、 Named Pipes

Ø降低应用之间通信次数,例用户认证服务,工作流服务,数据库服务

Ø降低应用之间传输数据量,不必要传输的不传,少传

Ø缓存机制:缓存常用的,不易变化的,偶有变化,可以考虑缓存依赖机制

Ø支持异步计算,降低等待时间

Ø考虑延迟加载,或者提前加载两种方式

Ø分离原则:分离业务模块,如分离大I/O模块、分离高耗内存模块,分离高耗宽带模块

Ø考虑分布式应用,分布式存储,如以上所有仍然搞不定的

Web优化

Web优化偏向于熟悉前端开发的技术人员

Ø减少http请求

Ø避免404错误

Ø在html页面header加入缓存标签

ØGzip压缩网页

Ø减少cookie体积

Ø使用外部的js和css

Ø消减js和css

Ø压缩js

Ø使用css sprites技术,众多图片合成在一起,通过CSS切分,降低图片传输的频率和数据量

Ø可以使用静态网页的,避免使用动态网页

架构优化递进

为以示与应用层优化的区别,本文对架构的描述更侧重偏向于物理层面,再次赘述下,涉及变更架构的,需要我们的应用具有良好的拓展性,考验我们的架构师平时的功底,如何刚刚好满足需求以及两三年内业务增量,但并非架构做的越强大,越灵活,越可配置,越易水平拓展就是越好的,其一考虑此应用的投入产出比,换言之,是否值得投入这么多架构设计成本,其二架构设计也是具有一定的时效性的,IT速度太快了,今天的好东西未必是明天的好东西,年轻貌美的姑娘,总有变成老太婆那一天嘛,再者、越灵活的架构,就意味着存在更多的配置项,从某一方面,反而增加了系统的复杂度,最后、很多大型,成熟的应用,也并非一蹴而就,而是通过不断的调整优化,不断变更架构的。圣人也并非天生的,而是不断的总结,提炼,优化,重构

Ø硬件方面使用高性能的小型机、存储设备。使用极好的网络带宽

Ø物理分离Web Server和DB Server或者其他服务如:用户认证服务

Ø缓存

ü数据缓存机制

ü页面缓存机制

Ø物理分离业务模块,单业务单独部署一台服务器

Ø部署多台Web Server

ØWeb负载均衡-F5

Ø数据读写分离

Ø使用消息队列进行各种应用间进行同步/异步计算

Ø应用间选择合适的通信方式,通信协议

ØWeb分布式,应用分布式,数据分布式

Ø分布式的节点使用高性能服务器,小型机群,辅以高速网络带宽等

工具包

Ø进程管理器,CPU,内存,I/O

Ø日志:IIS日志,Windows日志,系统本身日志

Ø使用dotTrace,跟踪方法执行时间,找出速度慢的方法,针对性优化

ØSql Profile跟踪SQL耗时情况,针对性优化

ØHttpWatch跟踪请求耗时,以及发送和收到数据量

ØPerformance Count,使用计数器,统计相关性能指标

ØCLRProfiler内存泄露检测工具

ØLoadRunner,压力测试,发现性能瓶颈

其他补充

本文任何一处均可展开叙述,并辅以案例,但时间关系,希望工程中心有人帮忙完善或者以后有时间自己完善吧

转载于:https://www.cnblogs.com/AmilyWilly/p/4791893.html

系统性能调优的各个方面相关推荐

  1. LAMP 系统性能调优

    1.LAMP 系统性能调优,第 1 部分: 理解 LAMP 架构 http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-1/index.html ...

  2. Android系统性能调优工具介绍

    经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评 ...

  3. Perf -- Linux下的系统性能调优工具,第 2 部分

    https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/ Perf -- Linux下的系统性能调优工具,第 2 部分 刘 明, 软件工程师, 上 ...

  4. 系统性能调优必知必会(脑图更新。。)

    系统性能调优必知必会 CPU缓存 CPU多级缓存,单核心会有自己的一级二级缓存,所有核心会共享三级缓存 一级缓存包括数据缓存 .指令缓存. 数据的读取是以缓存行进行读取的,缓存行一般为64字节. 缓存 ...

  5. 原理剖析(第 013 篇)应用系统性能调优

    原理剖析(第 013 篇)应用系统性能调优 - 一.大致介绍 1. 本人接手的一个打车系统,因为出现了一次响应十分缓慢的情况,因此才有了应用调优的篇章: 2.由于过程中可能没有阐述的太清楚,如想详细了 ...

  6. 浅谈高并发系统性能调优

    女主宣言 今天带来的是一个篇长文,主要讲解高并发系统架构指标及调优测试经验,希望能对您的研究有所帮助.本文最先发布于 OpsDev,转载已获取作者授权. PS:丰富的一线技术.多元化的表现形式,尽在& ...

  7. 《java系统性能调优》--1.发现瓶颈

    性能啊!性能! 之所以想写写性能调优,也是有感于我们的项目,我们採用一些手段使得系统性能上升了一个台阶,总是须要把这点经验沉淀一下.随着工作的深入,关于系统性能的事肯定还有非常多,也算是通过这个系列文 ...

  8. Linux文件系统性能调优 参数优化

    由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性.然而在特定应用下,这种配置往往在I/O 性能方面不能达到最优.因此,如果应用对I/O性能要求较高,除 ...

  9. 《java系统性能调优》--3.数据库

    这是我前几天整理的一篇 数据库优化的文章,贴出来与大家共享. 据统计,以数据库为中心的应用程序80%的性能问题是低效的SQL语句引起的,所以SQL的性能优化显得十分重要.另一方面,Oracle数据库应 ...

  10. html5调用系统声音1s响一次_记录一次系统性能调优过程

    在线上环境,由于业务场景需要,要求程序能够在普通的4G机器中依然正常运行. 而原来的环境配置为8核16G,微服务部署,一共有6个功能模块. 而现在要求在一台4核4G的设备上正常运行. 问题清单 模块合 ...

最新文章

  1. Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16
  2. MySQL数据库设计总结
  3. MS的完整形式是什么?
  4. Linux——VMware虚拟机安装CentOS步骤
  5. 第四章信息系统安全基础考试要点及真题分布
  6. 2015-2016 XVI Open Cup, Grand Prix of Bashkortostan, SKB Kontur Cup Stage 2
  7. python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数
  8. docker安装带管理界面的rabbitmq
  9. [转载] python的面向对象和类与对象
  10. web安全与渗透测试培训全套视频
  11. python如何确定拐点_如何在嘈杂的曲线中找到拐点?
  12. 定时任务Quartz基础
  13. 【语义分割数据集】——cityscape数据集类别名称
  14. 学习markdown
  15. Visual Studio Code下载安装教程
  16. 如何保证手机APP兼容性覆盖测试
  17. inputbox使用
  18. hau 1870 愚人节的礼物(栈)
  19. Zoommy for mac(图片素材搜索下载软件)
  20. 山东理工ACM 1152 C语言实验——求两个整数之和

热门文章

  1. mysql 定时备份 空_如何在不停止Mysql服务的状况下,定时备份mysql数据库
  2. 帆软高级函数应用之层次坐标函数
  3. 如何更改spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天
  4. stm32l0的停止模式怎么唤醒_关于Mac的睡眠模式
  5. 经典神经网络 -- VGG : 设计原理与pytorch实现
  6. 自学TP5源码(一)
  7. Android 教你打造炫酷的ViewPagerIndicator
  8. http2-协议协商过程
  9. C++的ORM 开源框架
  10. 关于全局低级键盘hook的记录(WH_KEYBOARD_LL)