PHP优化之缓存Opcache

在上一篇Nginx负载均衡与RabbitMQ消息队列实践,我们实践了Nginx负载均衡与RabbitMQ消息队列的数据落盘,但是,你以为解决高并发的手段就结束了吗?

现在我们来了解一下Opcache:
对于PHP解释型语言,不产生机器码,而是产生中间码(中间码是不能直接执行,这个中间码只有解释器可以识别到,中间码要靠解析器来进行执行)
比如说PHP的解析器是Zend,PHP使用Zend引擎,中间码我们也称作为操作码(opcode),而Opcahce这样的缓存组件就是将PHP代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。

现在我们将启用AB测试在100并发下的结果:

Concurrency Level:      100
Time taken for tests:   20.698 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      286000 bytes
HTML transferred:       13000 bytes
Requests per second:    48.31 [#/sec] (mean)
Time per request:       2069.847 [ms] (mean)
Time per request:       20.698 [ms] (mean, across all concurrent requests)
Transfer rate:          13.49 [Kbytes/sec] received

我们可以看到吞吐率是Requests per second: 48.31 [#/sec] (mean)

吞吐率是服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。

现在我们来安装opcache
安装过程查看PHP官网Opcache

安装后再次执行

ab -c 100 -n 1000 http://192.168.2.101/log
Concurrency Level:      100
Time taken for tests:   7.816 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      286000 bytes
HTML transferred:       13000 bytes
Requests per second:    101.87 [#/sec] (mean)
Time per request:       781.610 [ms] (mean)
Time per request:       9.816 [ms] (mean, across all concurrent requests)
Transfer rate:          28.45 [Kbytes/sec] received

我们可以看到吞吐率已经从48提升到101,超过一倍的提升

接下来我们继续增加并发数;

ab -c 150 -n 2000 http://192.168.2.101/log
Concurrency Level:      150
Time taken for tests:   14.060 seconds
Complete requests:      2000
Failed requests:        0
Write errors:           0
Total transferred:      572000 bytes
HTML transferred:       26000 bytes
Requests per second:    120.74 [#/sec] (mean)
Time per request:       1054.496 [ms] (mean)
Time per request:       9.030 [ms] (mean, across all concurrent requests)
Transfer rate:          30.93 [Kbytes/sec] received

我们可以看到即使在150的并发下我们的吞吐率也可以维持在每秒120吞吐率左右,证明Opcache确实提升了我们系统的可用性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 标签: PHP 本篇文章旨在提供一个对PHP7版本中Zend虚拟机的概述,不会做到面面俱到的详细叙述,但尽力包含大...
    JUTSSAM阅读 5,605评论 1 3
  • 1.什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(O...
    半亩房顶阅读 2,206评论 0 1
  • 什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Ope...
    人在码途阅读 3,073评论 0 3
  • 1.概述 字节码缓存不是PHP的新特性,有很多独立的扩展可以实现,比如APC、eAccelerator和Xache...
    石非木阅读 4,326评论 1 2
  • 今天是姐姐的生日,也是妹妹的生日。姐姐是亲姐姐,妹妹是表妹,两个人正好差了17岁。 姐姐在外婆家排行老大,因为妈妈...
    路语旁集阅读 1,495评论 0 0