系统调优的思路

发布时间 2023-11-01 10:48:54作者: kisshappyboy

性能调优的实际内容,简单来说包括三块:硬件、操作系统、应用程序。

硬件包括:CPU、内存、磁盘、网卡、其它……,

操作系统包括 进程、虚拟内存、文件系统、网络、其它……,

应用程序我就不用说了大家都懂,常见的有Apache、MySQL、Nginx、Memcahed等。

性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。这就是我们说的性能调优
下面我们来说一说为什么需要性能调优,其实说到底就两原因:一是为了获得更好的系统性能(就是你现有的系统运行的还不错,但优化一下可以运行的更好)。二是通过性能调优来满足不断增加的业务需求。为了更直观的帮助大家来理解为什么要性能调优?我们分别从三个方面来说:
硬件选型(根据服务器应用类型来选购服务器)
操作系统发行版本 (选择发行版本)
应用程序 (Nginx、MySQL等)

负载均衡:性能要求相对较低,因为只负责转发数据,但要保证选一性能突出的网卡即可。(推荐配置: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))
其它服务器:至于其它服务器就看各位的具体需要具体分析了。

上线前(硬件选型)
上线后(硬件扩展)

3.应用程序

最后我们来说说应用程序优化,这里我们来说一下MySQL优化例子,让大家更直观的了解。

MySQL 编译安装优化
MySQL 配置文件优化
索引优化
MySQL 引擎优化
查询缓存优化
SQL 语句优化
优化表类型(MyISAM或InnoDB)
锁机制优化
MySQL 服务器优化(换SSD)
通达上面的对硬件、操作系统、应用程序的具体说明相信,大家对性能优化有了更深层次的了解,下面我们来说一个重要的问题,什么人来进行性能优化?

怎么样进行性能调优?(How)
下面进入正题了我们说一说怎么进行性能调优,具体步骤如下:

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

1.性能指标

上面我们说了,我们优化的目的是为了获得更好的性能,那么性能指标是什么呢?我们怎么样来衡量,一般衡量一个项目(这里指的网站)的指标有三个:

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

我们做产品或者说项目(更直白的说是网站)目的是为了让用户使用,我们得先站在用户的角度分析一下,用户需要关注哪些性能。

对于用户来说,当点击一个按钮、链接或发出一个操作指令,到系统把请求处理好发给用户并用网页的形式展现出来为止,这个过程中所消耗的时间是用户对这个网站性能的直观印象。

也就是我们所说的响应时间,当响应时间较小时,用户体验相对来说就会好,当然用户体验的响应时间包括个人主观因素和客观响应时间。

在网站开发与搭建时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。用户关注的是用户操作的相应时间。

其次,我们站在运维的角度考虑需要关注的性能点。再次,我们得站在开发(设计)人员角度去考虑网站性能。最后,由QA测试与反馈我们网站性能。

经过上述的说明,我们来测试系统的性能,需要我们收集系统的吞吐量、并发数、响应时间这三个重要的指标。具体步骤是:

确认吞吐量、并发数、响应时间这三个值
找到或开发相应的性能测试工具
进行性能测试
反馈结果并提交测试报告
结果,有两个一种是达到我们预期的性能目标,这样我们就不需要性能优化任务完成可以交给运维上线,只需要进行相关的性能监控,方便上线后进行性能优化。

另一种是没有达到我们预期的目标,我们要查找性能瓶颈并进行性能优化。

硬件:

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

具体调优步骤

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

5.性能监控

性能监控这个很重要,具体包括服务器性能监控和具体服务的性能监控。下面我们说一说具体有哪些性能监控指标:

服务器的性能监控

CPU 使用率
CPU负载
内存使用率
磁盘I/O
网络流量
磁盘空间
系统进程
服务的性能监控(MySQL)

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