For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了web服务器性能优化常见问题等内容,而本文我们就再来学习一下,web服务器优化都有哪些方案。
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来实现的,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服务器上获取,可以明显的提升网站性能。