• 【性能优化】(1)概述


    性能优化概述


    2019-07-21  09:49:25  by冲冲

    1. 理解性能优化

    计算机的体系结构主要包括三部分:硬件、操作系统、应用程序。其中,硬件有CPU、内存、硬盘等;操作系统有进程、虚拟内存、文件系统、内核等;应用程序有Apache、MySQL、Nginx、Memcahed等。

    性能调优就是对计算机硬件、操作系统和应用程序有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用程序)的性能最大化,并能不断的满足现有的业务需求。

    性能优化通常着重考虑对操作系统和应用程序的调优。

    2. 硬件调优

    (1)无论是租用服务器还是够买服务器,都需要选择服务器的硬件配置。选择依据主要是服务器的应用类型,也就是服务器的业务需求。

    • 负载均衡:性能要求相对较低,因为只负责转发数据。注意配置一性能突出的网卡。(推荐配置:CPU E5620 x 1、内存 8G、硬盘 500G(RAID5))
    • Web 服务器:只处理一些静态页面或者图片等,要求不是很高,主流的服务器都可以。(推荐配置:CPU E5620 x 1、内存 16G、硬盘 500G(RAID5))
    • 应用服务器:承担网站功能的实现,在架构中占较重的位置,特别是网站架构中只有一台应用服务器,对CPU、内存、磁盘要求都比较高。(推荐配置:CPU E5620 x 2 内存 32G 硬盘 500G(RAID10))
    • 缓存服务器:分为前端页面缓存与后面数据缓存,典型应用分别是Varnish与Memcached,对内存的要求比较大,注意配置较大的内存。(推荐配置:CPU E5620 x 1 内存 32G 硬盘 500G(RAID10))
    • 数据库服务器:对CPU、内存、磁盘的要求都很高,某部分的短板都会带来性能问题。(推荐配置:CPU E5620 x 2 内存 64G 固态硬盘 500G(RAID10))
    • 备份服务器:要求不高,注意配置足够大的硬盘空间。(推荐配置:CPU E5620 x 1 内存 4G 硬盘 2TB(RAID5))
    • 监控服务器:要求不高,普通的PC服务器就可以。(推荐配置:CPU E5620 x 1 内存 4G 硬盘 500(RAID5))
    • 其它服务器:具体需要,具体分析。

    (2)硬件的性能调优主要包括两方面:

    • 上线前(硬件选型):节约成本的前提下把钱花在刀刃上。要求选择合适的硬件配置,这是网站开始构建架构或者项目实施首先要解决的问题。
    • 上线后(硬件扩展)

    3. 操作系统调优

    ① 参数调优:《Linux Performance Tuning》(Linux 性能调优)指出,厂商发布的OS,通过保守的默认配置,能够兼容市场绝大部分计算机。但是你可以调节OS的配置参数来获得更高的性能,比如你有个高性能的磁盘,但是如果你的操作系统中一些选项参数默认没有启动的话,就不能实现这些高级功能来提高硬盘性能。

    • 操作系统安装优化
    • 系统初始化
    • 进程调优
    • 内存调优
    • IO 调优
    • 文件系统调优
    • 网络调化

    ② 版本选择:RedHat、CentOS等操作系统在项目实施或网站架构中较多使用,它们是针对企业级应用而开发的操作系统。而Ubuntu之类的操作系统对桌面支持得比较好,所以选择发行版本时得注意(一般企业中用的比较多的是CentOS)。再有就是我们一般不要选择最新的发行版,因为刚出来的发行版相对来说bug还比较多,不要先当“小白鼠”了。比如:刚刚出来CentOS 7 等过一段时间稳定了再使用,目前我们可以选择 CentOS 6.4 或 6.5即可。但是新版本也有很多好处,新版本中加入了很多新功能,去掉许多已知bug,对于一些不重要的应用,可尝试使用新的操作系统。

    4. 应用程序调优

    应用程序的调优对象通常是Apache、Nginx、MySQL。

    (1)MySQL的调优

    • MySQL 编译安装优化
    • MySQL 配置文件优化
    • 索引优化
    • MySQL 引擎优化
    • 查询缓存优化
    • SQL 语句优化
    • 优化表类型(MyISAM或InnoDB)
    • 锁机制优化
    • MySQL 服务器优化(换SSD)

    5. 程序代码调优

    ① Buffer:缓解应用系统上下层组件之间的性能差异,比如通常的 IO Buffer。
    ② Cache:通常用于读多写少的情况,也是用来缓解应用系统上下层组件之间的性能差异。比如,应用 local cache,Memcached/Redis。
    ③ Batch:网络或磁盘里的批量操作,通过合并小任务或小请求为大任务大请求,来提升数据传输效率低。比如 TCP 中的 nagle 算法,就是通过合并多个小分组来提升网络传输效率的。
    ④ Pool:通过减少对象创建,连接建立的开销来提升性能。比如线程池,连接池,对象池。
    ⑤ Concurrency:通过将串行改为并行,能过有效的降低系统延时。在多核系统中,并行处理才能提升 CPU 使用率。
    ⑥ Lock Less:多线程访问共享资源时,通常需要加锁。重量级的锁往往引起线程切换,而线程切换非常耗时。那么可以通过优化锁的使用来提升性能,优化锁有两种方法:
    A. 通过减小锁的粒度,分离竞争点来减少竞争。比如 Java 里 HashTable 中锁的粒度是整个对象,ConcurrentHashMap 中锁的粒度只是一个 Segment。
    B. 在竞争较少的情况下,使用轻量级锁来代替重量级锁,减少线程切换带来的性能消耗,比如自旋锁代替互斥锁。

    6. 流程调优

    性能优化是一个团队的事情。项目的开发流程主要是:

    • 运营部门提出需求
    • 产品部门整理需求
    • 开发部门开发具体的业务应用
    • 运维部门搭建开发环境
    • 测试(QA)部门进行项目测试
    • 运维部门进行项目上线
    • 监控部门进行项目监控

    一个项目(业务)存在性能问题,不会只是运维部门需要性能调优而是所有部门一起解决该性能问题。因为需要调优的地方可能出现在产品,也可能出现在程序上(*.php),也可能是业务需要本身就有问题,也可能是运维的环境搭建有问题。但参加性能调优的更多的是开发、运维、测试和监控。

    7. 怎样进行性能调优?

    (1)性能调优的时期

    • 上线前(基本优化):①准备硬件服务器、安装操作系统、搭建开发环境。②开发出项目。③性能调优。
    • 上线后(持续优化):对上线后的项目进行性能监控(包括服务器性能监控和服务性能监控) 。

    (2)性能调优的具体步骤

    • 性能指标 –> 确认衡量标准
    • 性能测试 –> 验证性能指标
    • 性能分析 –> 找出性能瓶颈
    • 性能调优 –> 解决性能问题
    • 性能监控 –> 检验调优效果

    ① 性能指标

    • 吞吐量 –> 是单位时间内完成的用户或系统的请求数量。
    • 并发数 –> 同时能接受多少用户的访问请求。
    • 响应时间 –> 用户发出请求到收到响应的时间间隔。

    ② 性能测试

    ③ 性能分析

    使用监控工具为性能调优提供数据,找出瓶颈。

    硬件:

    • 用vmstat、sar、iostat检测是否是CPU瓶颈
    • 用free、vmstat检测是否是内存瓶颈
    • 用iostat检测是否是磁盘I/O瓶颈
    • 用netstat检测是否是网络带宽瓶

    操作系统:

    • 进程
    • 文件系统
    • SWAP 分区
    • 内核参数调整

    应用程序(MySQL):

    • mysqlreport 性能分析报告
    • mysqlsla 慢查询日志分析

    ④ 性能调优

    • 确定调优目标
    • 具体调优步骤
    • 检测调优结果

    A, 确定调优目标。首先,跟上司明确性能提升的数值(10%、20%、或者更大)。然后,各部门各司其职。通常填补开发部门的代码坑(例如优化SQL查询),性能的提升效率远高于优化OS。

    B. 具体调优步骤:

    • 如果你不懂系统的参数,你千万不要对系统的参数进行随意的改动,不然你会后悔。
    • 每次只对一种系统资源进行系统调试,如CPU、或内存、磁盘。
    • 每次改动尽量少的参数设置,推荐每次修改一个设置。
    • 分析一项系统资源时,使用多种工具,往往有意想不到的结果。
    • 不及胜于过之(宁愿少做一点,不要做过头了,性能已达到要求就不要随意乱动,做好你的监控)。

    C. 检测调优结果。每次性能调优后必须对性能进程检测,如Web服务器的ab工具,就是一个很好的检测工具,每次调优后都能看到具体的变化。

    ⑤ 性能监控

    A. 服务器性能监控

    • CPU 使用率
    • CPU 负载
    • 内存使用率
    • 磁盘I/O
    • 网络流量
    • 磁盘空间
    • 系统进程

    B. 服务性能监控(MySQL)

    • MySQL查询吞吐率,包括Change DB、Select、Insert、Update、Delete
    • MySQL持久连接利用率
    • MySQL查询缓存空间使用率
    • MySQL查询缓存命中率
    • MySQL缓存查询数
    • MySQL索引缓存命中率
    • MySQL索引读取统计
    • MySQL连接吞吐率
    • MySQL连接缓存命中率
    • MySQL并发连接数,包括最大允许连接数、实际最大连接数、当前连接数、活跃连接数、缓存连接数
    • MySQL流量统计
    • MySQL表统计锁定

    参考:

    https://blog.csdn.net/zenglinhua1/article/details/79047514

    https://blog.csdn.net/hustspy1990/article/details/77834550

  • 相关阅读:
    oracle 删除表中重复数据留一条
    C# 特性
    oracle 常用简单命令语句
    2017年学习计划
    java web开发基础学习
    Java Axis2支持json
    java基础教程
    axis2 发布webservice
    孤荷凌寒自学python第103天认识区块链017
    孤荷凌寒自学python第102天认识区块链016
  • 原文地址:https://www.cnblogs.com/yadiel-cc/p/11220828.html
Copyright © 2020-2023  润新知