为什么站点访问慢?请收好这份Web服务器性能提升的总结

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

我们知道,Web页面内容有静态的,也有动态的,静态的内容,web服务器可以直接将结果发回给浏览器,对于动态内容,则通常需要交给应用服务器先处理,由应用服务器返回结果。

当然,也有Web服务器本身可以处理动态内容的,例如IIS就可以自已解释处理ASP,ASP.NET这两种微软的动态网页脚本语言。

从上面简要的分析里,我们大致可以得到这样的结论,影响Web页面访问的影响因素会有这几个:

上面8项很容易理解,也很直接,其实还有以下几项也是关乎Web页面访问速度体验的因素,你可以思考下是否如此?或者说是否会影响到页面访问性能。

我们可以将上面一共11项影响因素抽像出来,那么就是:

反映到我们进行性能优化,可以入手的角度就有:

经过前面小节的简要分析,我相信你对优化Web服务器有一定的思路了,你可以从硬件层面、软件层面、Web代码三个层面去优化。

下面我们结合一个具体的实例来实践一回,本文所举例是一个小型的Web站点,部分数据系假设,如有类同,纯属巧合,仅起抛砖引玉之用。在实际工作中,如果碰到大站点,你可以参考此处的分析,修改优化方案。

1.站点简介

一个社区论坛站点,采用Discuz!论坛程序构建,该程序采用主流的PHP+MySQL组成。

网站目前有近5万注册用户,绝大多数是国内的用户,活跃用户数在一半左右,每天平均PV在15~20万,独立访问IP数在8000左右。

2.Web服务器性能优化需求

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

另外,虚拟主机的服务器在美国,没有在国内租用虚拟主机的原因是国内网站在备案方面非常繁琐,在网站一开始运营时数据量和访问量都比较小,所以对性能要求不高,数据量小,所以服务器在查询处理数据时速度比较快,也让人感觉访问速度不慢,现在随着数据量和访问量的不断上升,访问速度已明显下降,到了需要改善访问性能的时候了。

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

上述两点需求,其中第一条才是性能优化需求,第二条是额外的需求了。

3.性能优化方案

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

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

虚拟主机受限比较多,无法自己自定义配置Web服务器,无法配置PHP动态缓存,而且独立服务器可以独享内存、处理器资源,不再受虚拟主机商对每个虚拟主机用户的内存和处理器资源占用限制。处理器资源和内存资源,对接受更多并发访问有直接性能提升效果。

由Windows操作系统改为Linux操作系统

网站使用的是PHP+MySQL程序,PHP在Windows下的性能,受限于IIS需要通过ISAPI形式调用PHP,所以性能不如Linux下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进行以下设置优化:

选用了Nginx,虽然它的性能很好,但我们仍然需要对它进行性能优化,在这个案例中,我们做了以下优化:

经过上述几个优化项目,Nginx这边一共需要占用200M左右内存资源。

对PHPCGI进程性能进行优化

Nginx没有PHP模块,所以它对PHP的支持是通过PHP-FPM来实现的,PHP-FPM是跑进程来处理并发请求,在这个案例中,我们配置了20个进程,每个进程差不多占用20M左右内存资源,一共是400M左右。

同时,PHP-FPM与Nginx交互机制,选用LinuxSocket模式而不是TCP协议端口,Socks是系统级处理模式,socks也就是一个文件连接,而TCP协议端口,需要经过网络协议处理,性能不如前者,所以我们选择了前者。

MySQL数据库性能优化

因为网站主程序是选用他人开发的开源程序,所以对数据库查询的程序优化我们无法处理,只能从MySQL本身寻找突破口。

我们可以想像一下,对于论坛网站,通常看贴、查贴的访问量要远大于创建贴子、回复贴子的访问量,体现在MySQL数据库上,就是读表与查询表数据的连接处理更多。

因此我们要选择对读表、查询性能更好的存储引擎,结合以前了解的知识,MySQL缺省的MyISAM引擎就是被设计为适合处理读频率远大于写频率的环境,查询效率相当可观,而且内存占用很少,这也与我们租用低内存配置的VPS相符。

具体到MySQL配置参数的优化上,受限于服务器上内存资源本身有限,就直接采用缺省的中型环境配置文件。

内容分发网络应用

站点每天十多万的访问,上万独立IP访问,查看先前的访问统计,访问来自国内各个地区,使用多种网络连接访问进来,为保证来自各网络的用户访问速度,同时也减少对网站服务器的请求,我们采用了CDN来分发静态内容,这样各地的用户可以就近访问到已缓存在CDN上的文件,CDN服务商会在静态内容第一次访问时缓存到他们全国各地的服务器上,当第二次访问时,用户实际是没有连接到网站服务器上获取文件的,而是直接从CDN服务器上获取,可以明显的提升网站性能。

参考资料

下面推荐介绍几本有关Web性能优化的图书,可以找来阅读,尤其是《构建高性能WEB站点》这本书,非常值得服务器运维工程师阅读,它是国内一本面向服务器工程师的性能优化书籍,比较系统地讲解了优化思路,且有很多实际操作方面的举例说明。

作者:Coagent

GOPS2020全球运维大会·2020深圳站,更多DevOps、AIOps、自动化运维精彩议题,等你来~

THE END
1.推荐的Web性能计时:多长时间才算太长?网页加载时间在优化性能时,请务必设定雄心勃勃的首次加载目标,例如通过移动 3G 网络 5 秒,在办公室 T1 线路上 1.5 秒,并为后续页面加载设定更雄心勃勃的页面加载目标,利用服务工作人员和缓存。初始加载页面与加载其他资源、响应用户交互以及确保流畅的动画有不同的建议时间: https://blog.csdn.net/weixin_49307011/article/details/135250941
2.转:获取WEB各阶段响应时间by2018https://developer.mozilla.org/zh-CN/docs/Web/API/Navigation_timing_API web性能】Web performance 获取web各个阶段响应时间:DNS解析时间、TCP建立连接时间、首页白屏时间、dom渲染完成时间、页面onload时间等 准确地测量web应用程序的性能特性是使web应用程序更快的一个重要方面 https://www.cnblogs.com/beiyue/p/13778190.html
3.网站响应时快时慢的真相?只有1%的人知道平常工作生活中,不知你有没有遇到这种情况,有时访问网站异常的快,有时却要等待10多秒才会有响应, 这种情况下,我们一般不会太多的停留在网站,因为影响了用户体验。 平常工作生活中,不知你有没有遇到这种情况,有时访问网站异常的快,有时却要等待10多秒才会有响应, 这种情况下,我们一般不会太多的停留在网站,因为https://www.51cto.com/article/621097.html
4.web应用的常见性能指标有哪些web应用的常见性能指标:页面加载时间、全部页面加载时间、首字节时间、DNS时间、TCP时间、页面渲染、下载速度、页面流畅度、网络丢包率、网络时延、请求响应时间、事务响应时间、并发用户数等。 本教程操作环境:windows10系统、Dell G3电脑。 web的性能指标 https://zhuanlan.zhihu.com/p/366528070
5.页面加载或响应需要多长时间?腾讯云开发者社区该应用程序是面向用户的web应用程序。一页包含一个大的rich:dataTable (800行,11列)。这个页面的加载速度非常慢,需要14秒,其中下载页面的时间可以忽略不计。我更喜欢在一页上显示表格,而不是分页。我想测量一下JSF生命周期的不同阶段所使用的时间。为页面获取数据的数据库查询是相当优化的,我怀疑响应呈现花费了https://cloud.tencent.com/developer/information/%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%E6%88%96%E5%93%8D%E5%BA%94%E9%9C%80%E8%A6%81%E5%A4%9A%E9%95%BF%E6%97%B6%E9%97%B4%EF%BC%9F-ask
6.web前端性能响应时间指什么?Worktile社区延迟加载:对于页面上一些不重要的资源,可以采用延迟加载的方式,等用户需要时再加载,减少首次加载时间。 使用CDN加速:将静态资源部署在全球各地的CDN节点上,可以提高资源加载速度,减少网络延迟。 总之,Web前端性能响应时间是一个重要的指标,对于提供良好的用户体验至关重要。通过优化相应的方面,可以提高网站或应用的性能,https://worktile.com/kb/ask/796965.html
7.不容忽视的关键指标:揭秘网站性能优化,从响应时间到页面加载速度网站性能优化指标大揭秘:从响应时间到页面加载速度,你不能忽视的关键指标! 随着互联网的发展,人们对网站性能的要求也越来越高。无论是对于用户体验的要求,还是对于搜索引擎排名的要求,都需要我们不断优化网站的性能。但是,在进行网站性能优化时,我们应该从哪些指标入手呢?下面将分析并揭秘一些关键指标,帮助大家更好地https://www.php.cn/faq/666090.html
8.如何测试和提高网站的加载速度?霆万科技了解完网站速度的重要性,我们需要对网站进行测试,以下是常用的网站速度检测工具: Google PageSpeed Insights 网址:https://pagespeed.web.dev/ Google PageSpeed Insights是一个免费的在线工具,提供网站性能分析。只需输入检测的网址,几分钟就可获得页面的速度评分(从0到100),并提供一些优化建议。 https://www.teamone.cn/website-loading-speed/
9.Web服务器响应缓慢的原因探析(web服务器访问慢是怎么回事服务器硬件配置低、网络带宽不足、数据库查询效率低下、代码优化不足等都可能导致Web服务器响应缓慢。 Web服务器响应缓慢的原因 1、服务器硬件性能不足 CPU处理能力不足 内存容量不足 磁盘I/O性能不佳 2、网络带宽不足 网络传输速度慢 网络拥堵 网络设备故障 https://www.henghost.com/news/article/83831/
10.网站的加载时间和响应时间是一会事吗?有什么区别?响应是先于加载的 当你向一个网站请求时,从你发送请求,到网站给你返回消息,这个中间就是这个网站的响应时间 而加载时间,是在响应后将返回的页面或者消息加载出来所需要的时间 希望能帮助到你,望采纳 https://zhidao.baidu.com/question/689238411291367444.html
11.如果一个web页面响应慢,可能是哪些原因造成的?如果一个 web 页面响应慢,可能是由于以下原因造成的: 网络延迟:客户端和服务器之间的网络延迟可能会导致页面响应慢,尤其是在跨地区或者跨国家的情况下。 服务器配置不当:服务器的硬件配置不足、软件配置不当、负载过高等问题可能会导致服务器性能下降,从而导致页面响应慢。 https://www.jianshu.com/p/51603cb2732e
12.如何测量web页面加载时间·测试之家感谢,我看网上有一些脚本可以计算指标;不让开发干预的情况下,怎么自己写 js 脚本获取到打开 web 页面时拿到性能数据并生成报告 杨腾 #10· 2023年02月10日 这个接口,window.performance,详细的指标需要百度下。 jack #11· 2023年02月10日 Author 对 南山老人i #6 回复 (function() { handleAddListener(https://testerhome.com/topics/35520
13.Web性能客观上,它是测量网页或 Web 应用程序下载、在用户的 Web 浏览器中绘制并变得响应和交互所需的时间,以毫秒为单位。它是每秒帧数和主线程不可用于用户交互的时间。主观上,它是用户对从请求内容到用户认为所请求的内容可用的时间感知:用户觉得所花费的时间是快还是慢。 http://developer.mozilla.org/zh-CN/docs/Glossary/Web_performance