什么是性能调优?(what)

为什么需要性能调优?(why)

什么时候需要性能调优?(when)

什么地方需要性能调优?(where)

什么人来进行性能调优?(who)

怎么样进行性能调优?(How)

硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10

操作系统: CentOS 6.4 x86_64(64位)

注:5w+1h就是对所做工作进行科学的分析,对某一工作在调查研究的基础上:

就其工作内容(What)

责任者(Who)

工作岗位(Where)

工作时间(When

怎样操作(How

以及为何这样做(Why)

即对”5W”、”1H”进行书面描述,并按此描述进行操作,达到完成职务任务的目标。

什么是性能调优?

(what)

在说什么是性能调优之前我们先来说一下,计算机的体系结构。

如上图,简单来说包括三块:硬件、操作系统、应用程序。其实,性能调优就是调节这些内容,包括硬件、操作系统、应用程序。其中,这三大方面中又包含了若干的内容。

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

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

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

那什么是性能调优呢?

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

这就是我们说的性能调优,客官你懂了嘛?

为什么需要性能调优?

(why)

下面我们来说一说为什么需要性能调优,其实说到底就两原因:一是为了获得更好的系统性能(就是你现有的系统运行的还不错,但优化一下可以运行的更好)。二是通过性能调优来满足不断增加的业务需求。为了更直观的帮助大家来理解为什么要性能调优?

我们分别从三个方面来说:

硬件选型(根据服务器应用类型来选购服务器)

操作系统发行版本 (选择发行版本)

应用程序 (Nginx、MySQL等)

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))

其它服务器:至于其它服务器就看各位的具体需要具体分析了。

这下各位知道什么是硬件的性能调优了吧,根据你具体的应用,进行具体分析特别是像MySQL这样的服务器,对CPU、内存、磁盘要求都比较高。

所以,对硬件的性能调优我们必须做到选择合适的硬件配置。这是网站架架构或者项目实施首先要解决的问题!

2.操作系统

有本书叫《Linux Performance Tuning》(Linux 性能调优)这本书是老外写的,作者是 Fernando Apesteguia 。

为什么我们需要性能调优?他得出的结论是这样的:

“当一个发行版打包发送到客户手中的时候,它是为了完全兼容市场中大部分计算机而设计的。这是一个相当混杂的硬件集合(硬盘,显卡,网卡,等等)。

所以Red Hat,SUSE,Mandriva,Ubuntu和其他的一些发行版厂商选择了一些保守的设置来确保安装成功。”

简单说,你的操作系统已经运行的不错了,但是你可以调节它获得更高的性能,比如你有个高性能的磁盘,但你的操作系统中一些选项参数默认没有启动,就不能实现这些高级功能来提高硬盘性能。

还有我想说就是对操作系统发行版选择的问题,RedHat或CentOS这些操作系统在项目实施或网站架构中用的比较多,主要针对企业应用而开发的操作系统。

而Ubuntu之类的操作系统对桌面支持的比较好,所以选择发行版本时得注意。(一般企业中用的比较多的是CentOS)再有就是我们一般不要选择最新的发行版,因为刚出来的发行版相对来说bug还比较多,不要先当“小白鼠”了,

比如:刚刚出来CentOS 7 等过一段时间稳定了再使用,目前我们可以选择 CentOS 6.4 或 6.5即可。

(但新版本也有很多好处,新版本中加入了很多新功能,去掉已知bug,对于一些不重要的应用,可尝试使用新的操作系统)

3.应用程序

最后,我们得来说说应用程序了,我们先来简单看到一下Apache的MPM配置文件:

prefork 模型:


大家可以从上面的配置文件中可以看出,apache 开始启动时启用 8个进程,最小 5个进程,最大20个进程,每个进程限制请求数为256个,最多可以接受请求 4000个,超过这个限制数自动销毁。

worker 模型:
再看一下,worker模型的配置文件,默认启动2个进程,每个进程可以接受的请求为150个,每个进程中最小线程数25个,最大线程数为75个,默认线程数25个,每个线程可以接受的请求没有限制为0。

好了,大家看完上面的配置文件,可以看出默认的Apache配置文件,设置的比较保守,只适于一些中小网站,想要获得高性能的Apache服务器还必须进行性能调优,包括apache编译选项,配置文件优化等,具体的调优我们在这里先不细说。

通过我们上面的讲解,我们分别从硬件、操作系统、应用程序,这三个方面入手和大家谈谈为何需要性能调优,相信大家已经知道并了解,相信大家都迫不及待了吧。

嘿嘿,我们先不急还有很多问题没有说清楚,下面我们和大家来说说,什么时候需要性能调优?

什么时候需要性能调优?

(when)

一般分为两个时间段:

上线前(基本优化)

上线后(持续优化)

为什么这样说呢,一般我们在项目实施到项目上线这段时间,不但要准备硬件服务器、安装操作系统、环境搭建,还有个很重要的问题就是进行性能优化,包括操作系统优化和应用环境优化等,我称上线前的优化为基本优化也称为经验优化。

根据你做过的项目和你工作中的经验对上线前的服务器或架构进行基本的性能优化来满足业务需求。

再有就是项目上线后的优化,在上线前我们已经经过基本的性能优化,解决大部分的性能问题,但毕竟上线前的所以测试都是模拟测试并进行相关的性能优化,与上线后的真实环境还是有相当大的区.

我们首先要做的就是对上线后的项目进行性能监控包括服务器性能监控和服务性能监控。

服务器性能监控包括:

CPU使用率、CPU负载、内存使用率、磁盘I/O、磁盘空间使用率、网络流量、系统进程等,服务性能监控包括apache、nginx、mysql。

以上架构中所有的服务都需要进行性能监控,一但发现有问题我们都得去进行性能优化,在这个过程中我称为持续优化也称为监控优化。下面我们来具体的说一下,具体什么地方需要性能调优?

什么地方需要性能调优?

(where)

在上面我们说性能调优只说一些大的方面,包括硬件、操作系统、应用程序这三大块。

其实还有一块就是程序本身的优化,开发人员根据需求开发出来的程序本身就需要性能优化,但对于我们运维人员来说接触的比较少而已。

下面我们就来看看这三大块:

硬件 (CPU、内存、磁盘、网卡)

操作系统(进程、文件系统、内核 ……)

应用程序(Nginx、MySQL ……)

1.硬件

硬件优化一般也包括两块:

上线前(硬件选型)

上线后(硬件扩展)

一般项目搭建时都需要根据具体的应用进行硬件配置选型,在这方面需要一定的运维经验刚接触的朋友可以在这方面有点欠缺,但没事一般做过一两个项目以后,对硬件配置选型也就会了,嘿嘿。

但有个不成文的经验,硬件配置还是越高越好(别说是我说的)。

我们为什么说需要根据具体的应用来选型呢,一方是什么样的应用需要什么样的硬件配置,还有点很重要就是节约成本,钱得要在刀刃上不该花的钱我们不能乱花,也是为公司节约成本,实现资源利用最大化。

上面我们说的是项目搭建初期,你运气比较好项目一开始你就在这边。

一般有经验的运维工程师在硬件选型是不会有问题的,所以我们在性能优化时就不考虑硬件这块,从理论上讲我们服务器硬件配置一般不会出现在这种性能问题上。

但是呢,由于我们业务做的越来越好,项目创建初期没有考虑到会有这么大的性能需要(访问量),现在有的硬件不能满足业务需求,所我们这时需要更换更好的CPU、更大的内存和更快的磁盘。

至于如何找出硬件是性能瓶颈我们先在这里不细说,在后面的文章中我们将会细说。最后我们来看一张硬件架构图,能帮你更好的理解硬件优化,如下图(Dell R 710 架构):
2.操作系统

下面我们来说操作系统,其实绝大部分的优化都在操作系统和应用程序的优化,除了上线前的硬件选型和上线后的硬件扩展,下面我们就来看看操作系统优化包括哪些:

操作系统安装优化

系统初始化

进程调优

内存调优

IO 调优

文件系统调优

网络调化

下面我们来看一张图,可以更直观的帮助我们理解,如下图:
3.应用程序

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

MySQL 编译安装优化

MySQL 配置文件优化

索引优化

MySQL 引擎优化

查询缓存优化

SQL 语句优化

优化表类型(MyISAM或InnoDB)

锁机制优化

MySQL 服务器优化(换SSD)

通达上面的对硬件、操作系统、应用程序的具体说明相信,大家对性能优化有了更深层次的了解,下面我们来说一个重要的问题,什么人来进行性能优化?

什么人来进行性能调优?

(who)

一说起性能优化我们第一个想到的是运维工程师,他们来进行优化。

其实我想说,这么说是片面的性能优化不仅仅是运维工程师的事。

其实呢,性能优化是一个团队的事。我为什么这么说呢?

下面我们就来说一下,大家想啊一公司需要做一项目,我们就拿最常见的电子商务中商城的项目来说吧,公司确认由于业务需要我们需要在网上做一个建材商城,那项目的具体流程是什么呢?可能不是很详细,但大体过程是样的:

运营提出需求

产品整理需求

开发开发具体的业务应用

运维搭建开发环境

QA 进行项目测试

运维进行项目上线

监控进行项目监控

开发一个具体的应用需要运营部、产品部、开发部、运维部、QA (测试)、监控等所以有部门的参加。

同样的一个项目(业务)存在性能问题,不会只是运维部门需要性能调优而是所以部门一起解决这个性能问题,这是缺一不可的。

可能出现在产品,也可能出现在程序上(*.php),也可能是业务需要本身就有问题,也可能是运维的环境搭建有问题。但参加性能调优的更多的是开发、运维、测试和监控。

怎么样进行性能调优?

(How)

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

性能指标 –> 确认衡量标准

性能测试 –> 验证性能指标

性能分析 –> 找出性能瓶颈

性能调优 –> 解决性能问题

性能监控 –> 检验调优效果

1.性能指标

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

吞吐量 –> 是单位时间内完成的用户或系统的请求数量。

并发数 –> 同时能接受多少用户的访问请求

响应时间 –> 用户发出请求到收到响应的时间间隔。

2.性能测试

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

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

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

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

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

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

具体步骤是:

确认吞吐量、并发数、响应时间这三个值

找到或开发相应的性能测试工具

进行性能测试

反馈结果并提交测试报告

结果,有两个一种是达到我们预期的性能目标,这样我们就不需要性能优化任务完成可以交给运维上线,只需要进行相关的性能监控,方便上线后进行性能优化。

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

3.性能分析

通过上面的性能测试,我们发现网站没有达到我们预期定义的性能目标,这时我们需要做的就是对现有的系统(服务器)进行监控,包括硬件与软件监控,为性能调优提供有效的性能监控数据。

下面我们重点来说一下,用什么工具能找出性能瓶颈:

硬件:

用vmstat、sar、iostat检测是否是CPU瓶颈

用free、vmstat检测是否是内存瓶颈

用iostat检测是否是磁盘I/O瓶颈

用netstat检测是否是网络带宽瓶

操作系统:

进程

文件系统

SWAP 分区

内核参数调整

应用程序(MySQL等):

mysqlreport 性能分析报告

mysqlsla 慢查询日志分析

4.性能调优

确定调优目标

我们性能优化的目标是网站性能提高10%还是20%,不能老大说今天你给我优化一下网站性能,你就能使用网站性能翻一倍。

首先,你要问他我们需要达到一个怎么的目标。

然后,我们要了解一下整个环境(架构)包括代码(当然你需要了解一下业务逻辑,大致了解一下,肯定没坏处),有时间多和开发沟通一下,问问代码中有多少坑要填,这很重要。

往往他们优一下代码中的SQL查询,比你优化系统多少天都来的有效果,哈哈。

具体调优步骤

如果你不懂系统的参数,你千万不要对系统的参数进行随意的改动,不然你会后悔。

每次只对一种系统资源进行系统调试,如CPU、或内存、磁盘。

每次改动尽量少的参数设置,推荐每次修改一个设置。

分析一项系统资源时,使用多种工具,往往有意想不到的结果。不及胜于过之(宁愿少做一点,不要做过头了,性能已达到要求就不要随意乱动,做好你的监控)。

检测调优结果

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

5.性能监控

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

服务器的性能监控

CPU 使用率

CPU负载

内存使用率

磁盘I/O

网络流量

磁盘空间

系统进程

服务的性能监控(MySQL)

MySQL查询吞吐率,包括Change DB、Select、Insert、Update、Delete

MySQL持久连接利用率

MySQL查询缓存空间使用率

MySQL查询缓存命中率

MySQL缓存查询数

MySQL索引缓存命中率

MySQL索引读取统计

MySQL连接吞吐率

MySQL连接缓存命中率

MySQL并发连接数,包括最大允许连接数、实际最大连接数、当前连接数、活跃连接数、缓存连接数

MySQL流量统计

MySQL表统计锁定

总结:

在这篇性能优化概述的文章中只是给大家讲解一下具体的优化思路,帮助大家理解性能优化,这样大家更容易理解一些,让大家知道性能优化并不是传说中的那么难,难到不可动手去做,只要我们掌握好方法,什么难题都可以解决。

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

一篇让小百彻底搞懂性能调优相关推荐

  1. 「入门运维必看」一篇让小白彻底搞懂性能调优!

    前言: 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么人来进行性能调优?(who) 怎么样进行性能调优?( ...

  2. 一篇让小白彻底搞懂性能调优!

    前言: 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么人来进行性能调优?(who) 怎么样进行性能调优?( ...

  3. 阿里资深软件测试工程师总结的这几点,让你轻松搞懂性能调优

    什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How ...

  4. 【十八掌●武功篇】第八掌:HBase之性能调优

    这一篇博文是[大数据技术●降龙十八掌]系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌 系列文章: :[十八掌●武功篇]第八掌:HBase之基本概念 [十八掌●武功篇]第八掌:HBase之Sh ...

  5. 小布老师oracle 9i性能调优

    第01讲:Chapter 01--Overview of Oracle9i Database Performance Tuning 第02讲:Chapter 01--Overview of Oracl ...

  6. 还搞不懂性能调优?让你见识这份《Java性能调优PDF》啃完你就知道多厉害了!

    Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在"糙快猛"的互联网开发模式大行其道的今天,随着系 ...

  7. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  8. 如何开启jvm日志_做了10个小实验:搞懂了JVM三大参数类型

    本实验的目的是讲解 JVM 的三大参数类型.在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本节以实验的方式讲解 JVM 参数的查看和设置.希望大家 ...

  9. 一文搞定MySQL性能调优

    公众号回复关键词获取免费学习资料,加入前后端技术交流群和副业群.新建立的副业Q群:735764906. 数据库的操作越来越成为整个应用的性能瓶颈,这对于Web应用尤其明显.关于数据库的性能,这并不只是 ...

  10. 第七篇:双管齐下,JVM内部优化与JVM性能调优

    文章目录 一.前言 二.编译时优化 2.1 Javac编译器 2.2 Java语法糖 2.2.1 泛型和泛型擦除 2.2.2 自动装箱.自动拆箱.遍历循环 2.2.3 条件编译 三.运行时优化(核心: ...

最新文章

  1. 周志华出任京东人工智能研究院学术委员会委员
  2. HDU1002(高精度模拟加法)
  3. Mysql Mariadb 创建新用户
  4. svn 文件状态标记含义
  5. 本期赠书中奖名单公布
  6. postman返回值设置为全局变量
  7. 大叔手记(21):汤姆大叔博客园开博100天总结
  8. 北京师大网络教育计算机离线作一,2015北师大网络教育《计算机应用基础》离线作业2精选.doc...
  9. excel range 判断日期型_EXCEL常用函数二
  10. SQL Server高级查询之T-SQL编程(流程控制语句)
  11. numpy 库使用说明
  12. 青少年编程python等级考试题目_2020年全国青少年软件编程(python)等级考试试卷doc下载...
  13. 关于微信精选留言点赞刷赞之公众号评论点赞及文章评论点赞软件使用方法
  14. 一行代码完成模型训练,30倍加速,3毫秒急速识别,超强图像分类算法开源!...
  15. AI一分钟 | 大福利!谷歌2018年将公开内部机器学习培训课程;医疗影像领域今年最大融资出炉!图玛深维获软银中国2亿人民币投资
  16. vue中src路径的写法
  17. Invalid bound statement (not found)错误的可能原因
  18. roe公式 通达信 去年四季度_价格围绕价值上下波动-----价格偏离曲线公式
  19. Sencha Touch框架介绍
  20. 如何用php 图片合成一张图片,php图片合成方法(多张图片合成一张)

热门文章

  1. IE7IE8兼容性设置_服务器端设定
  2. 可自定义存储数据总空间的的类int_128函数库
  3. xlwings对excle文档设置条件格式
  4. 基于C语言和LPC1114开发板的嵌入式实验 SysTick实验、定时器实验、LED呼吸灯实验、蜂鸣器实验
  5. 创新认知 基于LPC1114单片机的传感器使用
  6. 如何解决excel文档打不开呢?
  7. Python练手项目:计算机自动还原魔方视频
  8. 2021-03-11 Android 异常情况下长按power按键10s关机或者重启
  9. 学会对VUE的SEO优化,你的网站总是排在前面
  10. 【VMware16的安装以及安装Linux教程(超详细上)