现在很多同学都会有Wordpress或者Typecho来搭建自己的博客。博客程序为了通用性和扩展性,会在性能上有所牺牲。如果我们博客变慢了,该如何自救呢?
首先,来看看没优化前到底有多慢
当前的系统环境:
Wordpress运行环境(主要是PHP和MySQL数据库):
WebServer配置:wordpress挂载在8010端口,然后通过nginx的upstream通过80端口代理出去。
压力测试的结果:
外网压测结果(100请求,10并发)
可见基本上就是挂掉的节奏,QPS只有1.98,CPU已经全部吃完。
内网压测结果(依旧是100请求,10并发)
QPS也只有2.08,CPU也是全部吃完。
来整理下我们的优化思路
一、如何找到瓶颈?先梳理一下一个网页请求的完整过程:
用户访问浏览器
浏览器发送请求到linux服务器
linux服务器将请求转发给nginx web 服务器
nginx web服务器将业务逻辑交给php进程进行处理
php进程通过调用mysql完成数据的CRUD工作
由上到下分别依赖于:
用户的操作习惯
用户到服务器的网络状况
linux服务器的进程调度和网络分配机制
nginx web服务器自身的调度转发机制
具体的业务逻辑实现机制
物理硬盘的读取速度
从目前CPU被完全吃完的情况来看,初步估计瓶颈在于wordpress具体的业务实现这块,ok,我们找找工具来验证一下
二、以下是php性能检测工具xhprof检测出来看到的情况:
可见wordpress代码本身性能很低,其中一个apply_filters函数被调用了7300多次,很显然,优化了他就能解决很多问题
ok,我们大致来看下这货干了些啥?
我们用地球语言翻译下,就是说用于添加一个过滤器的钩子,这个和wordpress的框架机制有关。wordpress的作者为了让他更灵活,更容易扩展,采用了Hook的机制,使得页面生成的各种地方,都可以随意的添加很多的自定义方法挂载进来进行扩展,但是同时也就导致性能出现了很大的问题。
ok,原因已找到,那么我们如何解决这个问题呢?
篇幅有限,且看明天第二讲,跟着笔者,将RPS逐步提升到1000以上!