当前位置: 首页 > 科技观察

Web服务器性能与站点访问性能优化

时间:2023-03-17 09:58:08 科技观察

优化思路要优化Web服务器的性能,我们先来看看Web服务器在处理网页时的步骤:1.Web浏览器向特定的服务器发送网页2、Web服务器收到网页请求后,查找请求的网页,并将请求的网页发送给Web浏览器;3.网络浏览器接收请求的网页内容并发送显示。以上三个步骤都与Web服务器有关,但实际的Web服务器性能与第二步关系最大,Web服务器需要找到浏览器请求的网页内容。我们知道网页内容可以是静态的也可以是动态的。对于静态内容,Web服务器可以直接将结果返回给浏览器。对于动态内容,通常需要先由应用服务器进行处理,然后由应用服务器返回结果。当然,也有可以处理动态内容的网络服务器。例如,IIS可以解释和处理ASP和ASP.NET这两种Microsoft动态网页脚本语言。从上面的简要分析,我们可以大致得出结论,影响网页访问的因素有几个:Web服务器从磁盘读取静态页面内容的速度,即时间;Web服务器决定请求内容为静态或动态内容的时候;Web服务器将请求转发给应用服务器的时间;应用服务器处理(解释)动态内容的时间;网络服务器向浏览器返回网络内容的响应时间;web服务器接收来自浏览器的请求处理性能;Web访问请求数据在网络上的传输时间:包括浏览器到服务器、服务器到浏览器两部分;浏览器在本地计算并渲染Web内容的时间,即接收到内容后显示内容的时间。以上8项通俗易懂,非常直白。其实以下几项也是影响网页访问速度体验的因素。大家可以想想是不是这样呢?或者是否会影响页面访问性能。Web服务器执行安全策略检查的时间,或性能;web服务器读取日志文件、写入日志内容、关闭访问日志文件的时间,先读取,再写入,再关闭。这三个步骤中的读写涉及磁盘访问性能因素;同时连接到web服务器的客户端数量,即并发访问的多少。以上我们可以抽象出一共11个影响因素,分别是:Web服务器磁盘性能;Web服务器与应用服务器交互性能;应用服务器处理动态内容性能,或动态内容应用处理性能;客户端与Web服务器的连接速度,即网络传输性能;Web浏览器解释和呈现Web内容的性能;Web访问的并发性能。反思我们的性能优化,我们可以从:增加带宽,包括服务端和客户端两边的互联网连接带宽;加快动态内容的处理性能;尽量使用静态内容,这样web服务器就可以请求应用服务器直接将web内容发送给浏览器。这里还有其他解决方案:动态内容缓存动态内容静态多服务器负载均衡,同时处理大量并发访问;提高服务器磁盘访问性能,这通常是说到I/O性能;减少网页中HTTP请求的数量;更换性能更好的网络服务器;合理部署服务器,将服务器部署在靠近客户端的位置,已被证明可以显着提高访问性能。性能优化实践经过上一节的简单分析,相信大家对优化web服务器已经有了一定的想法了您可以从三个层面对其进行优化:硬件层面、软件层面和网页代码。让我们用一个具体的例子来练习一下。本文中的示例是一个小型网站。有些数据是假设的。如有雷同,纯属巧合,仅作示例。实际工作中,如果遇到大型站点,可以参考这里的分析,修改优化方案。一、站点介绍一个社区论坛站点,使用Discuz!论坛程序,由主流的PHP+MySQL组成。网站目前拥有近5万注册用户,其中大部分为国内用户,活跃用户约占一半,日均PV在15万至20万左右,独立IP约8000个。2、Web服务器性能优化需求网站目前部署在国外服务器上,租用虚拟主机运行。因为流量比较大,经常会被虚拟主机服务商通知流量大,需要控制流量。另外,虚拟主机的服务器在美国。之所以不在国内租用虚拟主机,是因为国内的网站在备案方面非常繁琐。网站开始运营时,数据量和访问量都比较小,所以对性能要求不高。小,所以服务器在查询和处理数据的时候比较快,也让人觉得访问速度不慢。现在随着数据量和访问量的不断增加,访问速度明显下降,是时候提高访问性能了。基于社区网站现状,提出的优化要求是国内访问速度需要翻倍。目前,主页加载大约需要40秒。希望优化后能在20秒内加载首页。另外,建议网站数据可以每天自动备份一次,备份数据保存一个月,以便随时恢复。以上两个需求中,第一个是性能优化需求,第二个是附加需求。3、性能优化方案根据网站现状和优化需求,结合自身经验,加上谷歌搜索,不断与站主确认沟通,最终得出如下性能优化方案:从虚拟主机部署独立服务器部署虚拟主机相对受限,不能自己自定义配置web服务器,不能配置PHP动态缓存,独立服务器可以独享内存和处理器资源,不再受制于每个虚拟主机用户的内存和处理器资源由虚拟主机提供商提供。入住限制。处理器资源和内存资源对接收更多的并发访问有直接的性能提升作用。作为独立服务器,我们选择Linode2048型号,2G内存,4核处理器(所有LinodeVPS均为四核处理器),80G硬盘空间,800G网络流量。由Windows操作系统改为Linux操作系统,网站使用PHP+MySQL程序。Windows下PHP的性能受限于IIS需要通过ISAPI调用PHP,所以性能不如Linux下的Apache,Apache直接通过PHP模块解释PHP性能不如Nginx和PHP-FPM。由于使用的是独立服务器,所以操作系统也可以自己定。Linux系统,我们选择了熟悉的UbuntuLinuxServer10.04(12.04在一年前还没有),^-^。Web服务器使用Nginx而不是Apache。选择Nginx而不是Apache的原因很直接简单,因为站点中有很多静态附件文件,而Nginx在处理静态内容方面的性能几乎是Apache的10倍。在PHP解释和伪静态规则方面,Apache要强于Nginx,但这并不影响我们放弃它。为了缓解这种情况,我们稍后将动态缓存PHP。要动态缓存PHP查询,请使用加速器eAccelerator。PHP加速器是为了提高PHP的执行效率,从而缓存PHP的运行代码,使得PHP运行的后期执行中可以直接调用PHP运行代码,无需解析转换,速度快。它已经改善了很多。eAccelerator是一个开源的PHP加速器,优化和缓存动态内容,提高PHP脚本的缓存性能,几乎完全消除了PHP脚本编译时的服务器开销。它还起到优化脚本的作用,加快其执行效率。PHP程序代码的执行效率可以提高1-10倍,而且这种加速还是很明显的。具体来说,我们计划优化eAccelerator的以下设置:缓存使用物理内存而不是磁盘。我们知道内存的读写性能是硬盘的N倍,所以在内存资源可以安排的情况下,强烈建议使用内存来保存eAccelerator的缓存内容。缓存大小设置为32MB,这是操作系统默认支持的最大缓存容量。虽然可以通过修改配置文件来增加这个值,但是我们觉得没有必要,所以就放弃了。Nginx性能优化选择了Nginx,虽然它的性能很好,但是我们还是需要优化它的性能,在本例中,我们做了如下优化:使用8个进程,每个进程大约需要20M的内存消耗,这里一共大约使用了150M内存。充分利用主服务器的CPU核心:四核,使用CPU粘性配置选项(worker_cpu_affinity),每个核心处理器分配两个进程。启用gzip压缩功能:gzip压缩对JS、CSS、XML压缩非常有效,可以压缩一半,即传输时间加倍;对于图像文件,JPG已经过压缩,压缩性能较差。图片在本地缓存1天:网站上有很多图片。通常,一张图片上传后,不会频繁修改,只会被频繁访问。因此,将图片放在Nginx缓存中,可以减少服务器访问负载的次数,提高访问速度。.JS和CSS文件在本地缓存7天:这两种网页文件通常不会被修改,缓存是为了减少加载次数,提高访问速度。这两个文件之所以没有和图片一起设置缓存有效期,是因为不同文件的修改频率不同。Nginx日志每天裁剪一次:这个优化项可以大大减少Nginx日志文件的大小。经过一周的查看,每天的日志文件在50M左右。G、web服务器如果需要在内存中加载这么大的文件,系统本身内存就不够了,自然会使用磁盘进行缓存,影响性能。每天50M左右,可以顺利加载到内存中,方便Nginx在处理访问时快速保存访问日志。经过以上优化项目,Nginx总共需要占用200M左右的内存资源。优化PHPCGI进程的性能Nginx没有PHP模块,所以它对PHP的支持是通过PHP-FPM实现的,运行进程来处理并发请求。本例中,我们配置了20个进程,每个进程占用内存资源约20M,一共约400M。同时,PHP-FPM与Nginx的交互机制采用LinuxSocket方式而非TCP协议端口,Socks是系统级处理方式,socks是文件连接,需要对TCP协议端口进行处理受网络协议影响,性能不如前者,所以我们选择了前者。MySQL数据库性能优化由于网站主程序是别人开发的开源程序,我们无法处理数据库查询的程序优化,只能从MySQL本身寻找突破口。我们可以想象,对于论坛网站来说,阅读和查看帖子的访问量通常远大于创建和回复帖子的访问量,这体现在MySQL数据库中,就是表读取和访问的连接处理查询表数据更多。因此,我们需要选择读表和查询性能更好的存储引擎。结合前面的知识,MySQL默认的MyISAM引擎是为了适应读频率远大于写频率的环境而设计的。查询效率可观,内存占用也很少,这也符合我们租用的低内存配置的VPS。具体到MySQL配置参数的优化,受限于服务器本身内存资源有限,直接使用默认的中型环境配置文件。内容分发网络应用站点日访问量超过10万次,独立IP访问量数万次。查看之前的访问统计,访问来自全国各个地区,使用多种网络连接访问。为了保证各个网络用户的访问速度,同时也为了减少对网站服务器的请求,我们使用CDN分发静态内容,让全球用户都可以访问已经缓存在CDN上的文件附近,CDN服务商第一次访问时会把静态内容缓存到他们全国各地的服务器上,实际上,当用户第二次访问时,用户实际上并没有连接到网站服务器获取文件,而是直接从CDN服务器获取,可以显着提高网站的性能。