关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

web服务器性能优化方法

发布时间:2019-07-05 12:09:06

    优化思路分析:

    

    要优化web服务器的性能,我们先来看看web服务器在网页处理中的步骤:

    

    1.web浏览器向特定服务器发送网页请求;

    

    2.web服务器接收到网页请求后,查找所请求的网页,并将所请求的网页发送给web浏览器;

    

    3.网络浏览器接收所请求的网页内容并显示它。

    

    以上三个步骤都与web服务器有关,但web服务器的实际性能与第二步关系最大,web服务器需要找到浏览器请求的网页内容。

    

    我们知道,网页内容有静态、动态和静态之分,web服务器可以直接将结果发送回浏览器。对于动态内容,通常需要交给应用服务器处理,应用服务器会返回结果。

    

    当然,也有可以处理动态内容的web服务器。例如,iis可以解释和处理ASP和Asp.net这两种微软动态web脚本语言。

    

    从上面的简要分析,我们可以大致得出结论,影响网页访问的因素有以下几个:

    

    1.web服务器从磁盘读取静态页面内容的速度,即时间;

    

    2.web服务器确定所请求的内容是静态还是动态的时间;

    

    3.web服务器将请求转发给应用服务器的时间;

    

    4.应用服务器处理(解释)动态内容所需的时间;

    

    5.web服务器向浏览器返回web内容的响应时间;

    

    6.从浏览器接收请求的web服务器的处理性能;

    

    7.web访问请求数据在网络上的传输时间;包括从浏览器到服务器和从服务器到浏览器两部分;

    

    8.浏览器本地计算并呈现web内容的时间,即收到内容后呈现的时间。

    

    以上八项很好理解,也很直接。其实以下几项也是与网页访问速度体验相关的因素。你能想一想是不是这样?或者是否会影响页面访问性能。

    

    web服务器执行安全策略检查的时间或性能;

    

    web服务器读取日志文件、写入日志内容、关闭对日志文件的访问,然后在关闭前进行读取和写入的时间。这三个步骤中的读写都与磁盘访问性能因素有关。

    

    同时,与web服务器连接会话的客户端数量,也就是并发访问的数量。

    

    我们可以提取上述影响因素,即:

    

    1.web服务器磁盘性能;

    

    2.web服务器和应用服务器之间的交互性能;

    

    3.应用服务器处理动态内容的性能,或者动态内容应用处理的性能;

    

    4.客户端与web服务器的连接速度,即网络传输性能;

    

    5.网络浏览器解释和呈现网络内容的能力;

    

    6.web访问并发性能。

    

    为了体现我们的性能优化,我们可以从以下角度入手:

    

    1.增加带宽,包括服务器端和客户端两端的互联网连接带宽;

    

    2.加快动态内容的处理性能;

    

    3.尽可能使用静态内容,这样web服务器就可以直接将web内容发送给浏览器,而不需要请求应用服务器。这里,有以下解决方案:

    

    动态内容缓存

    

    静态动态内容

    

    多服务器负载均衡同时处理大量并发访问;

    

    提高服务器磁盘访问性能,也称为i/o性能;

    

    减少网页中Http请求的数量;

    

    更换性能更好的web服务器;

    

    实践证明,将服务器合理地部署在离客户端更近的地方,可以显著提高访问性能。

    

    性能优化实践

    

    经过上一节的简要分析,我相信你对优化web服务器有一些想法了。你可以从三个层面进行优化:硬件层面,软件层面,web代码层面。

    

    我们用一个具体的例子来实践一下。本文中的示例是一个小型网站,一些数据是假设的。如有雷同,纯属巧合,仅供参考。在实际工作中,如果遇到大站点,可以参考这里的分析,修改优化方案。

    

    1.网站介绍

    

    一个社区论坛网站,使用discuz!论坛建设,由主流php+mySQL组成。

    

    目前网站注册用户近5万人,大部分为国内用户,活跃用户约占一半,日均pV 15 ~ 20万,独立访问ip约8000个。

    

    2.web服务器性能优化要求

    

    现在,网站部署在国外的服务器上,这些服务器租用虚拟主机来运行。因为访问量比较大,所以经常会收到很多虚拟主机服务商的通知,要求控制访问量。

    

    另外,虚拟主机的服务器在美国,之所以不在国内租用,是因为国内网站备案非常繁琐。网站刚开始运营的时候,数据量和访问量都比较小,所以性能要求不高,数据量也小。所以服务器在查询和处理数据上更快,也让人感觉访问速度不慢。现在数据量和访问量越来越大,访问速度明显下降,是时候提高访问性能了。

    

    基于社区网站的现状,优化要求是国内访问速度需要翻倍。目前加载主页需要40秒左右。希望优化后的主页能在20秒内加载。

    

    另外,提出网站数据可以每天自动备份一次,备份的数据可以保存一个月,以便随时恢复。

    

    以上两个需求中,第一个是性能优化需求,第二个是附加需求。

    

    3.性能优化方案

    

    根据其网站的现状和优化需求,结合自身经验,加上Google的搜索,同时不断与网站主确认沟通,最终得出以下性能优化方案:

    

    从虚拟主机部署更改为独立服务器部署

    

    虚拟主机有很多限制,不能自己配置web服务器和pHp动态缓存。而且独立服务器可以独享内存和处理器资源,不再受限于虚拟主机厂商对每个虚拟主机用户的内存和处理器资源占用。处理器和内存资源可以直接提高接受更多并发访问的性能。

    

    独立服务器,我们选择Linode 2048型号,2g内存,4核处理器(Linode所有VP都是四核处理器),80g硬盘空间,800g网络流量。

    

    从windows操作系统转换到Linux操作系统

    

    网站使用pHp+mysQL程序。windows下pHp的性能受限于iis需要通过isApi调用pHp,所以性能不如Apache在Linux下通过pHp模块直接解释pHp,甚至不如nginx和pHp-Fpm。由于使用了独立的服务器,操作系统也可以自己决定。对于Linux系统,我们选择了大家熟悉的Ubuntu Linux server 10.04(一年前还没有12.04),-

    

    web服务器使用nginx而不是Apache。

    

    选择nginx而不是Apache的原因非常直接明了,因为站点中有很多静态附件文件,nginx在处理静态内容方面的性能几乎是Apache的10倍。

    

    Apache在pHp解释和伪静态规则方面比nginx好,但这并不妨碍我们放弃它。为了缓解这种情况,我们稍后动态缓存pHp。

    

    pHp查询的动态缓存,使用加速器e accelerator。

    

    pHp加速器是为了提高pHp的执行效率而缓存pHp的操作码,这样PHp的操作码就可以直接调用,不需要解析和转换,这样速度就提高了很多。

    

    EAccelerator是一款开源的pHp加速器,对内容进行优化和动态缓存,提高pHp脚本的缓存性能,使pHp脚本在编译状态下对服务器的开销几乎完全消除。它还优化了脚本,以加快它们的执行效率。pHp程序的代码执行效率可以提高1-10倍,这种加速还是非常明显的。

    

    具体来说,我们计划优化eAccelerator的以下设置:

    

    使用物理内存进行缓存,不要使用磁盘进行缓存。我们知道内存的读写性能是硬盘的N倍,所以在内存资源可以安排的情况下,强烈建议使用内存来存储eAccelerator的缓存内容。

    

    缓存大小设置为32mb,这是操作系统默认支持的最大缓存容量。虽然我们可以通过修改配置文件来增加这个值,但是我们觉得没有必要,所以放弃了。

    

    Nginx性能优化

    

    Nginx被选中。虽然它的性能很好,但我们仍然需要优化它的性能。在这种情况下,我们进行了以下优化:

    

    使用8个进程,每个进程大约需要消耗20m内存,这里使用了大约150m内存。

    

    充分利用主服务器的cpU核心:四核,使用cpU sticky配置选项(worker_cpu_affinity),每个核心处理器分配两个进程。

    

    开启gzip压缩功能:gzip压缩对JS、CSS、XML有非常好的压缩效果,可以压缩一半,也就是传输时间翻倍;对于图像文件,Jpg已经压缩,压缩性能较差。

    

    本地图像缓存1天:网站上有许多图像。通常图片上传后,不会频繁修改,只会频繁访问。因此,将图片放在nginx缓存中可以减少服务器访问的加载次数,提高访问速度。

    

    Js和css文件本地缓存7天:这两个web文件平时不会修改。缓存它们可以减少加载时间,提高访问速度。为什么这两种文件不与图片一起设置缓存有效期?这是因为不同的文件有不同的修改频率。

    

    NGX日志每天被切割一次:这个优化项可以大大减小nginx日志文件的大小。经过一周的复习,每天的日志文件都在50m左右。如果不是每天都切,每个月都切,那一个月的日志文件就好几G了。如果web服务器在内存中加载这么大的文件,系统本身就没有足够的内存,自然会用磁盘来缓存,影响性能。每天都可以在内存中平滑加载,让nginx在处理访问时快速保存访问日志。

    

    经过上述优化项目后,nginx需要占用200m左右的内存资源。

    

    优化pHp cgi进程的性能

    

    Nginx没有pHp模块,所以它对pHp的支持是通过pHp-Fpm实现的,pHp-Fpm运行进程处理并发请求。在这种情况下,我们配置了20个进程,每个进程占用20m左右的内存资源,总共约400m。

    

    同时,pHp-Fpm与nginx的交互机制是Linux socket模式,而不是tcp端口。socks是系统级的处理方式,socks是文件连接,而tcp端口需要网络协议处理,性能不如前者,所以我们选择了前者。

    

    MysQL数据库性能优化

    

    因为网站的主程序是别人开发的开源程序,我们无法应对数据库查询的程序优化,只能从mysQL本身寻找突破口。

    

    我们可以想象,对于论坛网站来说,阅读和查帖的访问量远大于创建和回复帖子的访问量,体现在mysQL数据库中,就是阅读和查询表格数据的联系更多。

    

    所以,我们不得不选择一个读表和查询性能更好的存储引擎。结合前面的知识,mysQL默认引擎myisAm的设计是为了适应阅读频率远高于写入频率的环境。查询效率可观,内存占用小,这也符合我们租用低内存配置的Vps。

    

    关于mysQL配置参数的优化,由于服务器本身内存资源有限,直接采用默认的中型环境配置文件。

    

    内容分发网络应用

    

    每天有超过10万的网站访问量,上万的独立ip访问量,查看以往的访问统计。访问来自中国的各个地区,使用了多种网络连接。为了保证各种网络用户的访问速度,减少对网站服务器的请求,我们使用cdn分发静态内容,让各地用户就近访问缓存在cdn上的文件。当Cdn服务提供商第一次访问静态内容时,他们会将静态内容缓存到遍布全国的服务器上。当他们第二次访问它时,用户实际上并不连接网站服务器获取文件,而是直接从cdn服务器获取,这样可以明显提高网站性能。

    


/template/Home/Zkeys/PC/Static