电子说
在说什么是性能调优之前,我们先来说一下,计算机的体系结构。
如上图,简单来说包括三块:硬件、操作系统、应用程序。其实,性能调优就是调节这些内容,包括硬件、操作系统、应用程序。其中,这三大方面又包含了若干的内容。
内核资料直通车:最新Linux内核源码资料文档+视频资料
学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
那什么是性能调优呢?
性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。这就是我们说的性能调优,客官你懂了嘛?
下面我们来说一说为什么需要性能调优,其实说到底就两个原因:一是为了获得更好的系统性能(就是你现有的系统运行得还不错,但优化一下可以运行的更好)。二是通过性能调优来满足不断增加的业务需求。为了更直观地帮助大家来理解为什么要性能调优?我们分别从三个方面来说:
1.硬件选型
不管你是租服务器也好还是自己买服务器也好都要遇到一个问题,我们选择什么样硬件配置的服务器。
一般我们是根据应用类型来选择服务器,因为你不可能一种硬件配置来满足所有的应用需求,因为每个应用的具体需求不一样。下面我们来看一下在项目实施中有哪些应用类型:
这下各位知道什么是硬件的性能调优了吧,根据你具体的应用,进行具体分析特别是像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 模型:
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
大家可以从上面的配置文件中可以看出,apache 开始启动时启用 8个进程,最小 5个进程,最大20个进程,每个进程限制请求数为256个,最多可以接受请求 4000个,超过这个限制数自动销毁。
worker 模型:
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
再看一下,worker模型的配置文件,默认启动2个进程,每个进程可以接受的请求为150个,每个进程中最小线程数25个,最大线程数为75个,默认线程数25个,每个线程可以接受的请求没有限制为0。
好了,大家看完上面的配置文件,可以看出默认的Apache配置文件,设置的比较保守,只适于一些中小网站,想要获得高性能的Apache服务器还必须进行性能调优,包括apache编译选项,配置文件优化等,具体的调优我们在这里先不细说。
通过我们上面的讲解,我们分别从硬件、操作系统、应用程序,这三个方面入手和大家谈谈为何需要性能调优,相信大家已经知道并了解,相信大家都迫不及待了吧。
嘿嘿,我们先不急还有很多问题没有说清楚,下面我们和大家来说说,什么时候需要性能调优?
一般分为两个时间段:
为什么这样说呢,一般我们在项目实施到项目上线这段时间,不但要准备硬件服务器、安装操作系统、环境搭建,还有个很重要的问题就是进行性能优化,包括操作系统优化和应用环境优化等,我称上线前的优化为基本优化也称为经验优化。
根据你做过的项目和你工作中的经验对上线前的服务器或架构进行基本的性能优化来满足业务需求。
再有就是项目上线后的优化,在上线前我们已经经过基本的性能优化,解决大部分的性能问题,但毕竟上线前的所以测试都是模拟测试并进行相关的性能优化,与上线后的真实环境还是有相当大的区.
我们首先要做的就是对上线后的项目进行性能监控包括服务器性能监控和服务器性能监控。
服务器性能监控包括:
CPU使用率、CPU负载、内存使用率、磁盘I/O、磁盘空间使用率、网络流量、系统进程等,服务性能监控包括apache、nginx、mysql。
以上架构中所有的服务都需要进行性能监控,一旦发现有问题我们都得去进行性能优化,在这个过程中我称为持续优化也称为监控优化。下面我们来具体地说一下,具体什么地方需要性能调优?
在上面我们说性能调优只说一些大的方面,包括硬件、操作系统、应用程序这三大块。
其实还有一块就是程序本身的优化,开发人员根据需求开发出来的程序本身就需要性能优化,但对于我们运维人员来说接触的比较少而已。下面我们就来看看这三大块:
1.硬件
硬件优化一般也包括两块:
一般项目搭建时都需要根据具体的应用进行硬件配置选型,在这方面需要一定的运维经验刚接触的朋友可以在这方面有点欠缺,但没事一般做过一两个项目以后,对硬件配置选型也就会了,嘿嘿。
但有个不成文的经验,硬件配置还是越高越好(别说是我说的)。
我们为什么说需要根据具体的应用来选型呢,一方面是什么样的应用需要什么样的硬件配置,还有点很重要就是节约成本,钱得要在刀刃上不该花的钱我们不能乱花,也是为公司节约成本,实现资源利用最大化。
上面我们说的是项目搭建初期,你运气比较好的项目一开始你就在这边。
一般有经验的运维工程师在硬件选型上是不会有问题的,所以我们在性能优化时就不考虑硬件这块,从理论上讲我们服务器硬件配置一般不会出现在这种性能问题上。
但是呢,由于我们业务做得越来越好,项目创建初期没有考虑到会有这么大的性能需要(访问量),现在有的硬件不能满足业务需求,所我们这时需要更换更好的CPU、更大的内存和更快的磁盘。
至于如何找出硬件是性能瓶颈我们先在这里不细说,在后面的文章中我们将会细说。最后我们来看一张硬件架构图,能帮你更好的理解硬件优化,如下图(Dell R 710 架构):
3.应用程序
最后我们来说说应用程序优化,这里我们来说一下MySQL优化例子,让大家更直观的了解。
通达上面的对硬件、操作系统、应用程序的具体说明相信,大家对性能优化有了更深层次的了解,下面我们来说一个重要的问题,什么人来进行性能优化?
一说起性能优化我们第一个想到的就是运维工程师,他们来进行优化。
其实我想说,这么说是片面的性能优化不仅仅是运维工程师的事。
其实呢,性能优化是一个团队的事。我为什么这么说呢?
下面我们就来说一下,大家想哪一公司需要做一项目,我们就拿最常见的电子商务中商城的项目来说吧,公司确认由于业务需要我们需要在网上做一个建材商城,那项目的具体流程是什么呢?可能不是很详细,但大体过程是这样的:
开发一个具体的应用需要运营部、产品部、开发部、运维部、QA (测试)、监控等所有部门的参加。
同样的一个项目(业务)存在性能问题,不会只是运维部门需要性能调优而是所以部门一起解决这个性能问题,这是缺一不可的。
可能出现在产品,也可能出现在程序上(*.php),也可能是业务需要本身就有问题,也可能是运维的环境搭建有问题。但参加性能调优的更多的是开发、运维、测试和监控。
下面进入正题了我们说一说怎么进行性能调优,具体步骤如下:
1.性能指标
上面我们说了,我们优化的目的是为了获得更好的性能,那么性能指标是什么呢?我们怎么样来衡量,一般衡量一个项目(这里指的网站)的指标有三个:
2.性能测试
我们做产品或者说项目(更直白的说是网站)目的是为了让用户使用,我们得先站在用户的角度分析一下,用户需要关注哪些性能。
对于用户来说,当点击一个按钮、链接或发出一个操作指令,到系统把请求处理好发给用户并用网页的形式展现出来为止,这个过程中所消耗的时间是用户对这个网站性能的直观印象。
也就是我们所说的响应时间,当响应时间较小时,用户体验相对来说就会好,当然用户体验的响应时间包括个人主观因素和客观响应时间。
在网站开发与搭建时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。用户关注的是用户操作的相应时间。
其次,我们站在运维的角度考虑需要关注的性能点。再次,我们得站在开发(设计)人员角度去考虑网站性能。最后,由QA测试与反馈我们网站性能。
经过上述的说明,我们来测试系统的性能,需要我们收集系统的吞吐量、并发数、响应时间这三个重要的指标。具体步骤是:
结果,有两个一种是达到我们预期的性能目标,这样我们就不需要性能优化任务完成可以交给运维上线,只需要进行相关的性能监控,方便上线后进行性能优化。
另一种是没有达到我们预期的目标,我们要查找性能瓶颈并进行性能优化。
3.性能分析
通过上面的性能测试,我们发现网站没有达到我们预期定义的性能目标,这时我们需要做的就是对现有的系统(服务器)进行监控,包括硬件与软件监控,为性能调优提供有效的性能监控数据。
下面我们重点来说一下,用什么工具能找出性能瓶颈:
硬件:
操作系统:
4.性能调优
确定调优目标
我们性能优化的目标是网站性能提高10%还是20%,不能老大说今天你给我优化一下网站性能,你就能使用网站性能翻一倍。
首先,你要问他我们需要达到一个怎么的目标。
然后,我们要了解一下整个环境(架构)包括代码(当然你需要了解一下业务逻辑,大致了解一下,肯定没坏处),有时间多和开发沟通一下,问问代码中有多少坑要填,这很重要。
往往他们优一下代码中的SQL查询,比你优化系统多少天都来的有效果,哈哈。
具体调优步骤
检测调优结果
每次性能调优后必须对性能进程检测,如Web服务器的ab工具,就是一个很好的检测工具,每次调优后都能看到具体的变化。
5.性能监控
性能监控这个很重要,具体包括服务器性能监控和具体服务器的性能监控。下面我们说一说具体有哪些性能监控指标:
服务器的性能监控
服务的性能监控(MySQL)
全部0条评论
快来发表一下你的评论吧 !