
要优化 Web 服务器的性能,我们先来看看 Web 服务器在 web 页面处理上的步骤:
Web 浏览器向一个特定的服务器发出 Web 页面请求;
Web 服务器接收到 web 页面请求后,寻找所请求的 web 页面,并将所请求的 Web 页面传送给 Web 浏览器;
Web 浏览器接收到所请求的 web 页面内容,并将它显示出来。
上面三个步骤都关系 Web 服务器,但实际 Web 服务器性能相关最大的是在第 2 步,这里 Web 服务器需要寻找来自浏览器所请求的 Web 页面内容。
我们知道,Web 页面内容有静态的,也有动态的,静态的内容,web 服务器可以直接将结果发回给浏览器,对于动态内容,则通常需要交给应用服务器先处理,由应用服务器返回结果。
当然,也有 Web 服务器本身可以处理动态内容的,例如 IIS 就可以自已解释处理 ASP, ASP.NET 这两种微软的动态网页脚本语言。
从上面简要的分析里,我们大致可以得到这样的结论,影响 Web 页面访问的影响因素会有这几个:
Web 服务器判定请求内容是静态还是动态内容的时间;
Web 服务器转发请求给应用服务器的时间;
应用服务器处理(解释)动态内容所需的时间;
Web 服务器返回 Web 内容给浏览器的响应时间;
Web 服务器接收来自浏览器请求的处理性能;
Web 访问请求数据在网络上传输的时间:包括从浏览器到服务器,和从服务器到浏览器两部分;
浏览器本地计算和渲染 Web 内容的时间,即接收内容后展现内容的时间。
上面 8 项很容易理解,也很直接,其实还有以下几项也是关乎 Web 页面访问速度体验的因素,你可以思考下是否如此?或者说是否会影响到页面访问性能。
Web 服务器执行安全策略检查的时间,或者说性能;
Web 服务器读取日志文件、写日志内容、关闭对日志文件访问的时间,先读后写再关闭,这三步中的读与写又涉及到磁盘访问性能因素;
同时与 Web 服务器连接会话的客户端数量大小,即并发访问量多大。
我们可以将上面一共 11 项影响因素抽像出来,那么就是:
Web 服务器磁盘性能;
Web 服务器与应用服务器交互的性能;
应用服务器处理动态内容的性能,或者说动态内容应用处理性能;
客户端与 Web 服务器的连接速度,即网络传输性能;
Web 浏览器解释和渲染 Web 内容的性能;
Web 访问并发性能。
反映到我们进行性能优化,可以入手的角度就有:
增加带宽,包括服务器和客户端两边的 Internet 连接带宽;
加快动态内容的处理性能;
尽可能多地使用静态内容,这样 Web 服务器就可以无需请求应用服务器,直接将 Web 内容发给浏览器端,这里可以入手的方案又有:
动态内容缓存
动态内容静态化
多台服务器负载均衡同时处理大量的并发访问;
提升服务器磁盘访问性能,也即通常所说的 I/O 性能;
减少网页中的 HTTP 请求数;
更换更好性能的 Web 服务器;
合理部署服务器,在离客户端更近的地方部署服务器,已经证明可以明显地提升访问性能。
性能优化实践
1. 站点简介
2. Web 服务器性能优化需求
3. 性能优化方案
由虚拟主机部署改为独立服务器部署
由 Windows 操作系统改为 Linux 操作系统
Web 服务器采用 Nginx,而不使用 Apache
对 PHP 查询进行动态缓存,使用 eAccelerator 这个加速器
-
缓存使用物理内存来进行,不使用磁盘来缓存。我们知道内存的读写性能是硬盘的 N 倍,所以在内存资源可以安排情况下,强烈建议使用内存来保存 eAccelerator 的缓存内容。 -
缓存大小设置为 32MB,这个值是操作系统默认支持最大的缓存容量。虽然可以通过修改配置文件来加大这个值,但我们觉得没有必要,所以就放弃了。
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 在处理访问时,可以快速的保存访问日志。
对 PHP CGI 进程性能进行优化
MySQL 数据库性能优化
内容分发网络应用
站点每天十多万的访问,上万独立 IP 访问,查看先前的访问统计,访问来自国内各个地区,使用多种网络连接访问进来,为保证来自各网络的用户访问速度,同时也减少对网站服务器的请求,我们采用了 CDN 来分发静态内容,这样各地的用户可以就近访问到已缓存在 CDN 上的文件,CDN 服务商会在静态内容第一次访问时缓存到他们全国各地的服务器上,当第二次访问时,用户实际是没有连接到网站服务器上获取文件的,而是直接从 CDN 服务器上获取,可以明显的提升网站性能。

重要公告 | ZKEYS公有云分销系统震撼上线!

点击"阅读原文" 查看更多

