魔扣论坛

魔扣源码论坛业务
查看: 2683|回复: 6

04Dec15让PHP7达到最高性能的几个Tips

[复制链接]

该用户从未签到

72

主题

2

回帖

75

积分

初级魔扣

Rank: 2

魔扣币
6
贡献
5
威望
3
发表于 2016-12-31 15:28:14 | 显示全部楼层 |阅读模式
魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
04 Dec 15 让PHP7达到最高性能的几个Tips
  PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下.

  PHP7 VS PHP5.6
    记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:
2. 使用新的编译器  
  使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量)
  其实GCC 4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.
  我之前的文章也介绍过:让你的PHP7更快之Hugepage , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages. 
  以我的CentOS 6.5为例, 通过:
  分配512个预留的大页内存:
$ cat /proc/meminfo  | grep Huge 
AnonHugePages:    106496 kB 
HugePages_Total:     512 
HugePages_Free:      504 
HugePages_Rsvd:       27 
HugePages_Surp:        0 
Hugepagesize:       2048 kB 
  然后在php.ini中加入:
  这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.
  开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
  在php.ini中加入:
  这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
  我之前的文章:让你的PHP7更快(GCC PGO) 也介绍过, 如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能. 
  具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:
  然后用你的项目训练PHP, 比如对于Wordpress:
  也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.
  最后:
  这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.
  暂时就这么多吧, 以后想起来再加, 欢迎大家尝试, thanks
34 Responses to “让PHP7达到最高性能的几个Tips” 
Emilio Hancox | 01 Apr 2016 06:07
  Menos mal que he dado con esta información. No sabe el tiempo que llevaba buscándola. Gracias. Abrazos!!!
  Masajes Relajantes – Masajes Eróticos – Masajes Tantricos
  ppto | 31 Mar 2016 17:28
  php 内核代码在线查看工具,http://www.phpsourcechm.com 不用只为了看内核代码在本地装ide了。 
  Anonymous | 27 Mar 2016 13:50
  请评价一下laravel框架。谢谢。
  Jerray | 26 Mar 2016 11:33
  Hello,鸟哥,遇到了奇怪的问题
  sysctl vm.nr_hugepages=512 这样开了HugePage以后,只要登录phpMyAdmin,FPM就会一直报 WARNING: [pool www] child 785 exited on signal 7 (SIGBUS……
  用gdb查看core dump结果如下
  Core was generated by `php-fpm: master process (/data/server/php/etc/php-fpm.conf) ‘.
  Program terminated with signal SIGBUS, Bus error.
  #0 zend_mm_alloc_small (size=, bin_num=8, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1284
  1284 heap->size = size;
  (gdb) bt
  #0 zend_mm_alloc_small (size=, bin_num=8, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1284
  #1 zend_mm_alloc_heap (size=, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1358
  #2 zend_mm_realloc_heap (heap=0x2aaaaac00040, ptr=0 0, size=, copy_size=79) at /data/software/php-7.0.4/Zend/zend_alloc.c:1454
  #3 0x00000000007abf5d in xbuf_format_converter (xbuf=xbuf@entry=0x7fff8800d7b0, is_char=is_char@entry=1 ’01′, fmt=0xddce8e “pool %s”,
  ap=ap@entry=0x7fff8800d7f8) at /data/software/php-7.0.4/main/spprintf.c:246
  #4 0x00000000007acbca in vspprintf (pbuf=0x7fff8800d8d8, max_len=0, format=, ap=ap@entry=0x7fff8800d7f8)
  at /data/software/php-7.0.4/main/spprintf.c:847
  #5 0x00000000007accb2 in spprintf (pbuf=pbuf@entry=0x7fff8800d8d8, max_len=max_len@entry=0, format=format@entry=0xddce8e “pool %s”)
  at /data/software/php-7.0.4/main/spprintf.c:871
  #6 0x00000000008906c5 in fpm_env_init_child (wp=wp@entry=0x1d38000) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_env.c:142
  #7 0x000000000088c412 in fpm_child_init (wp=0x1d38000) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:155
  #8 fpm_children_make (wp=wp@entry=0x1d38000, in_event_loop=in_event_loop@entry=1, nb_to_spawn=nb_to_spawn@entry=1, is_debug=is_debug@entry=0)
  at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:407
  #9 0x000000000088c875 in fpm_children_bury () at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:288
  #10 0x0000000000890de6 in fpm_got_signal (ev=, which=, arg=)
  at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_events.c:77
  #11 0x000000000089aed6 in fpm_event_epoll_wait (queue=, timeout=)
  at /data/software/php-7.0.4/sapi/fpm/fpm/events/epoll.c:147
  #12 0x00000000008916b1 in fpm_event_loop (err=err@entry=0) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_events.c:411
  #13 0x000000000088c157 in fpm_run (max_requests=max_requests@entry=0x7fff8800dc78) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm.c:115
  #14 0x000000000043fbfc in main (argc=6, argv=0x7fff8800dfa8) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_main.c:1882
  把 vm.nr_hugepages改回0,不会再出现这个问题。
  terry | 09 Mar 2016 16:58
  正在试水中,7的性能和新特性让人期待。
  正山小种属于什么茶 | 01 Mar 2016 17:31
  看到最后,博主说“编译得到的PHP7是为项目量身打造的最高性能的编译版本”,一定要试一下啊…..看评论里大神们已经开始尝试了啊……
  chahualao | 28 Jan 2016 13:40
  辛苦了。
  dearbaba | 24 Jan 2016 14:13
  看了您的博文总结的非常好,您的博客非常不错。我也推荐一个程序员必备的搜索博客问答的网站http://www.itdaan.com 。 
  烈火青春 | 19 Jan 2016 22:56
  请问鸟哥平常用的什么开发工具?
  yumanutong | 25 Dec 2015 00:53
  恩恩,还不错。路过的
  石樱灯笼 | 22 Dec 2015 17:42
  关于“专门为一个项目服务”,这里有什么特别的含义吗?
  如果我的php既跑php,又跑其他自己写的php程序,会有问题吗?
  HugePages那里例子是512M,我的vps如果不足512该怎么做呢?要填小一些吗?
  lagolas | 22 Dec 2015 11:09
  每次编译到这里就这样,centos7 php7.0.1
  ext/openssl/.libs/xp_ssl.o: In function `php_openssl_setup_crypto’:
  /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:1599: undefined reference to `SSL_CTX_set_alpn_protos’
  /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:1604: undefined reference to `SSL_CTX_set_alpn_select_cb’
  ext/openssl/.libs/xp_ssl.o: In function `php_openssl_sockop_set_option’:
  /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:2305: undefined reference to `SSL_get0_alpn_selected’
  collect2: error: ld returned 1 exit status
  make: *** [sapi/cli/php] Error 1
  lagolas | 22 Dec 2015 10:56
  鸟哥 你好,你能发布一个php7安装配置以及依赖包的帖子吗?网上搜了好多安装,也都是各种问题,依赖包问题,以及配置问题。谢谢~
  lilj | 20 Dec 2015 17:18
  @lx 刚才尝试关闭了opcache, 可以扑捉到core。 你可以试一试。
  @Laruence 给你的 l***e@php.net 发了一封邮件, 不知道能否收到。 谢谢
  lilj | 20 Dec 2015 14:31
  @lx 没有解决
  @kn007 你可以去下载memcached的php7分支单独编译
  kn007 | 12 Dec 2015 14:57
  鸟哥,PGO学习的话,代码含有PHP扩展怎么办?
  我代码调用了Memcached扩展,但是编译的时候不带这个mc扩展,sapi/cgi/php-cgi直接报fatal error。
  谢谢
  bruce | 10 Dec 2015 17:10
  win server2012安装PHP7+fastcgi 想配置zend opcache但是php.ini里没有zend_extension=的选项,还需不需要加入zend_extension=”c:\php\ext\opcache.dll”这一行在php.ini里?
  lx | 10 Dec 2015 10:23
  @lilj 你的502问题解决了吗? 我也遇见了一个很怪的问题,一个地方不报错,也没有报错和core dump, 但是切换回5.6,也没问题。
  sgub | 09 Dec 2015 14:34
  已经把php7以及内置的extension都用gcc 4.9.2编译了。外部ext有必要用高版本gcc重新编译吗?比如 php-pecl-memcached?不需要的话我就直接拿remi的成品啦。
  lilj | 07 Dec 2015 21:22
  鸟哥, 刚看到回复
  我的意思是能否给你发邮件沟通, 不是说给你发邮件了。
  目前已经切换回了5.6, 不敢拿用户试验太久
  据初步判断,是spl_autoload 会出现core dump
  我把用到autoload的几处地方改成include了, 情况有所好转
  但是另外一个地方也老是产生502错误, 也没有报错和core dump, 只能先切换回5.6
  等以后有时间再优化一下代码看看。
  谢谢
  cloud | 07 Dec 2015 11:51
  鸟哥, osx 10.11 是不是只能用gcc编译,不能用clang?
  eechen | 07 Dec 2015 00:57
  PHP7用opcache.file_cache导出opcode实现代码保护
  http://my.oschina.net/eechen/blog/539995
  laruence | 06 Dec 2015 15:04
  @lilj 没收到你邮件啊, 你发送我gmail的?
  lilj | 06 Dec 2015 12:55
  抱歉,我又来刷屏了
  …
  (gdb) source /usr/local/src/php/php-7.0.0/.gdbinit
  (gdb) zbacktrace
  [0x7fe842c13520] spl_autoload_call(“Gifts_Model”) [internal function]
  [0x7fe842c134b0] class_exists(“Gifts_Model”) [internal function]
  [0x7fe842c13410] Controller->load(“Gifts_Model”) /mnt/data/env/php-7.0/lib/php/Yafext/Traits/Common.php:31
  [0x7fe842c13330] Controller->__get(“gifts_model”) /mnt/data/env/php-7.0/lib/php/Yafext/Traits/Common.php:18
  [0x7ffc105bc0b0] ???
  [0x7fe842c13140] Pvp_Fight_Controller->indexAction() /mnt/data/stable/sguo/server/app/controllers/Pvp/Fight.php:147
  [0x7fe842c130e0] Yaf_Application->run() [internal function]
  [0x7fe842c13030] (main) /mnt/data/stable/sguo/server/public/index.php:30
  …
  …
  $ cat /etc/php.ini |grep yaf
  extension=yaf.so
  [yaf]
  yaf.environ = product
  yaf.use_spl_autoload = 1
  …
  问题似乎在yaf的use_spl_autoload 上
  我用了一句 Yaf_Loader::getInstance->autoload(‘Gfits_Model’);
  话说鸟哥能给回复邮件么? 这里交流实在太不方便了
  谢谢
  lilj | 06 Dec 2015 12:31
  @laruence 你好
  经提醒开了core dump, 截取了以下数据
  ….
  Reading symbols from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yac.so…done.
  Loaded symbols for /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yac.so
  Reading symbols from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so…done.
  Loaded symbols for /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so
  Reading symbols from /lib64/libnss_files.so.2…(no debugging symbols found)…done.
  Loaded symbols for /lib64/libnss_files.so.2
  Core was generated by `php-fpm: pool alpha ‘.
  Program terminated with signal 11, Segmentation fault.
  #0 _emalloc () at /usr/local/src/php/php-7.0.0/Zend/zend_alloc.c:1291
  1291 heap->free_slot[bin_num] = p->next_free_slot;
  ….
  (gdb) where
  #0 _emalloc () at /usr/local/src/php/php-7.0.0/Zend/zend_alloc.c:1291
  #1 0x000000000062adf6 in zif_spl_autoload_call ()
  #2 0x000000000074807f in zend_call_function ()
  #3 0 0000000000748722 in zend_lookup_class_ex ()
  #4 0x000000000076bf24 in zif_class_exists ()
  #5 0x000000000079e9bd in ZEND_DO_ICALL_SPEC_HANDLER () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:586
  #6 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414
  #7 0 0000000000748004 in zend_call_function ()
  #8 0 0000000000771244 in zend_call_method ()
  #9 0x00000000007891ec in zend_std_call_getter () at /usr/local/src/php/php-7.0.0/Zend/zend_object_handlers.c:202
  #10 0x000000000078a5ff in zend_std_read_property () at /usr/local/src/php/php-7.0.0/Zend/zend_object_handlers.c:564
  #11 0x0000000000791ab3 in ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER ()
  at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:23382
  #12 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414
  #13 0 0000000000748004 in zend_call_function ()
  #14 0 0000000000771244 in zend_call_method ()
  #15 0x00007fe8427a1b41 in yaf_dispatcher_handle () from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so
  #16 0x00007fe8427a2bf8 in yaf_dispatcher_dispatch ()
  from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so
  #17 0x00007fe84279e943 in zim_yaf_application_run ()
  from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so
  #18 0x00000000007cdffb in ZEND_DO_FCALL_SPEC_HANDLER () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:842
  #19 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414
  #20 0x00000000007d9ae7 in zend_execute () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:458
  #21 0x0000000000755c74 in zend_execute_scripts () at /usr/local/src/php/php-7.0.0/Zend/zend.c:1428
  #22 0x00000000006faee0 in php_execute_script () at /usr/local/src/php/php-7.0.0/main/main.c:2471
  #23 0x00000000007e505c in main () at /usr/local/src/php/php-7.0.0/sapi/fpm/fpm/fpm_main.c:1944
  …
  技能太差不会用gdb
  希望能有用, 目前已经切换回5.6版本
  谢谢
  simon_qqmmmqq | 06 Dec 2015 02:57
  鸟哥 NB
  [root@localhost php]# sysctl vm.nr_hugepages=512
  vm.nr_hugepages = 512
  [root@localhost php]# cat /proc/meminfo | grep Huge
  AnonHugePages: 288768 kB
  HugePages_Total: 0
  HugePages_Free: 0
  HugePages_Rsvd: 0
  HugePages_Surp: 0
  Hugepagesize: 2048 kB
  看看这个怎么回事?
  HugePages_Total: 0
  这个是代表huge pages 没设成功吗?
  Laruence | 05 Dec 2015 17:14
  @lilj 看看是不是php-fpm coredump了
  lilj | 05 Dec 2015 14:29
  昨天升级了生产环境中的一台
  升级后同样的配置, 相比其他5台
  php7这台的负载下去了, 但是(104: Connection reset by peer) 成8倍增长
  正在查原因
  Young | 04 Dec 2015 23:19
  第四个厉害了。 对于一些类库文件 简直就是预编译似的存在
  Lancer | 04 Dec 2015 22:53
  不得不说PHP7真的性能提高了不少。过一段时间准备拿项目做升级试试水。
  barbery | 04 Dec 2015 21:30
  还可以机器学习,生成个性的编译版本,PGO太屌了。。。
  Laruence | 04 Dec 2015 21:02
  @xLight 懒死你算了
  xLight | 04 Dec 2015 20:57
  pgo 之后的wordpress性能也应该show出来啊
  seatle | 04 Dec 2015 20:37
  有点吊的,支持鸟哥

该用户从未签到

0

主题

261

回帖

522

积分

高级魔扣

Rank: 4

魔扣币
261
贡献
261
威望
0
发表于 2017-2-12 17:22:33 | 显示全部楼层
风,吹着想念;云,裹着爱恋;山,藏着真心;水,流着柔情;雨,飘着浪漫;雾,漫着赤诚;您,怀着温馨;我,揣着思念;魔扣源码论坛祝愿我的好朋友天天开心快乐!

该用户从未签到

2

主题

253

回帖

508

积分

高级魔扣

Rank: 4

魔扣币
253
贡献
253
威望
0
发表于 2017-4-26 19:39:01 | 显示全部楼层
楼下的接上

该用户从未签到

0

主题

248

回帖

496

积分

中级魔扣

Rank: 3Rank: 3

魔扣币
248
贡献
248
威望
0
发表于 2017-9-5 17:19:08 | 显示全部楼层
广告位,,坐下看看

该用户从未签到

2

主题

235

回帖

472

积分

中级魔扣

Rank: 3Rank: 3

魔扣币
235
贡献
235
威望
0
发表于 2018-1-31 19:30:32 | 显示全部楼层
风爱上了云。本来就是不可能的事。我爱上了你。是我宿命中的悲伤。没有咖啡的早晨,就跟没有你的人生是一样的。当我的生命里面懂得什么叫LOVE的时候。我才知道什么叫爱。魔扣源码论坛,你能为我加上ING吗?

该用户从未签到

1

主题

244

回帖

489

积分

中级魔扣

Rank: 3Rank: 3

魔扣币
244
贡献
244
威望
0
发表于 2018-8-12 17:07:33 | 显示全部楼层
打开每天挂念的空间,想念每个与网络相遇的朋友,认真翻阅着每条留言,此时只有温馨与感动驻满心田。当我看到你的留言时感觉真好无论你身在何方,魔扣源码论坛,让快乐飞进你的小屋,让好运降落在你身边,让幸福常常与你相伴,让如意流淌你的心房,让岁月的诗句写满真诚与难忘,让我的留言为你带来快乐和吉祥!

该用户从未签到

0

主题

258

回帖

516

积分

高级魔扣

Rank: 4

魔扣币
258
贡献
258
威望
0
发表于 2019-1-26 17:38:59 | 显示全部楼层
欢迎你,亲爱的朋友,看到你的留言让我十分高兴。记得从我们第一次接触以后开始互访,至今已经有5个多月了,在这段时间里,我们从陌生到相识相知,增进了彼此信任,友谊不断加深,直到现在成为好朋友,这都是前世修来的缘分。魔扣源码论坛让我们珍惜这份缘,我相信我们的友谊将永存!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 联系我们
  • 新浪微博 :
  • 在线客服 :魔扣科技 
  • 源码QQ群 :魔扣源码论坛官方总群
  • 联系邮箱 :charlin#morko.net
  • 微信扫一扫
快速回复 返回顶部 返回列表