“Php.ini修改ondocker”与“Php7性能优化技巧”:页面之间的差异

来自linuxsa wiki
(页面间差异)
跳转到导航 跳转到搜索
Evan留言 | 贡献
创建页面,内容为“<pre> http://gitlab.lliao.net:8077/php/docker-for-services.git 伟哥我这边对docker-for-services这个项目做了以下调整: 1: 修改php-fpm目录下的…”
 
Evan留言 | 贡献
无编辑摘要
 
第1行: 第1行:
[[Php性能优化]]
= start=
== 0. 我们的优化参数==
<pre>vi php-fpm.conf
pm = static
pm.max_children = 400
pm.max_requests = 5000
request_terminate_timeout = 1
request_slowlog_timeout = 1 </pre>
== 1. Opcache ==
编译时记得加上
--enable-opcache=yes
phpinfo 查看 Zend OPcache
相关的配置还不够完善 有空 再看看 
[https://www.phpsong.com/1806.html php7安装opcache提升性能]
http://php.net/manual/zh/intro.opcache.php
[https://www.youngjuning.com/php7-0-optimize-important.html (have Opcache 配置)PHP 7.0性能优化]
[http://www.cnblogs.com/HD/p/4554455.html PHP- 性能加速 - 开启opcache]
记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:
<pre>
<pre>
http://gitlab.lliao.net:8077/php/docker-for-services.git
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1</pre>
 
==2. 使用新的编译器==
 
使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能
 
 
因为centos6.8 gcc  4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 而
cenots7 gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-11)
 
所以建议php7 + centos7 才是最好的搭配
 


==3. HugePage==


伟哥我这边对docker-for-services这个项目做了以下调整:
我之前的文章也介绍过: [http://www.laruence.com/2015/10/02/3069.html  让你的PHP7更快之Hugepage] , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.
1: 修改php-fpm目录下的php72.ini文件的配置
2: php-worker目录增加了php72.ini文件


需要你在es01服务器(172.16.0.10)上 git pull origin docker-for-services
以我的CentOS 6.5为例, 通过:
同时 build php-fpm php-worker 这两个容器 和 up -d php-fpm php-worker 这两个配置 保证此两项配置生效
  sudo sysctl vm.nr_hugepages=512


分配512个预留的大页内存:


bef
<pre> cat /proc/meminfo | grep Huge
root@e6b4675c1e96:/var/www# php -i  | grep memory_limit
AnonHugePages:    106496 kB
memory_limit => 256M => 256M
HugePages_Total:    512
HugePages_Free:      504
HugePages_Rsvd:      27
HugePages_Surp:        0
Hugepagesize:      2048 kB</pre>  


after
然后在php.ini中加入:
opcache.huge_code_pages=1
 
这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.
 
==4. Opcache file cache==
开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
在php.ini中加入:
opcache.file_cache=/tmp
#注意这个在freebsd11 + php7  会导致502 and 504
这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
 
==5. PGO==
我之前的文章: [http://www.laruence.com/2015/06/19/3063.html 让你的PHP7更快(GCC PGO)]  也介绍过, 如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能.
   
   
  docker-compose exec php-fpm bash
具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:
root@e6b4675c1e96:/var/www# php  -i  | grep memory_limit
 
memory_limit => 2560M => 2560M
$ make prof-gen
然后用你的项目训练PHP, 比如对于Wordpress:
 
  $ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null
也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.
 
最后:
 
$ make prof-clean
  $ make prof-use && make install
这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.
 


#这个要手工添加上去
### PHP Worker ############################################
    php-worker:
      build:


  volumes:
==后记==
        - ./php-worker/php72.ini:/usr/local/etc/php/php.ini
一个php-cgi 5.3 进程,大概占用多少内存呢,大概是20MB(具体的要看你的php加载了多少模块)。可以通过pmap指令查看哪些地方占用了内存。所以,尽量不要加载不必要的php扩展模块,可以减少不必要的内存浪费。
 
而php-fpm(php7) 程占用14M左右; ps :php5.6的大概是19M ;
 
所以建议在打包时 能不要的模块尽量不要喽,虽然php哥都喜欢大而全 哈哈


  docker-compose  up  -d  php-worker
php进程占用内存的大小,GB为单位
Recreating docker-for-services_php-worker_1 ... done
ps --no-headers -o rss -C php-fpm |awk '{ sum+=$1 } END { print (sum/1024/1024,"GB") }'
[root@prod-sns-es01 docker-for-services]# docker-compose  exec  php-worker  bash
4.12779 GB
root@a6418ca35e4d:/etc/supervisor/conf.d# php -i  | grep 2560
memory_limit => 2560M => 2560M


  update-rc.d  cron defaults
update-rc.d cron start 20 0 1 2 3 4 5 6 .


[[查看php-fpm内存占用命令]]


update-rc.d mysql start 20 3 4 5 .
==php7 on freebsd11==
<pre>
查看php 扩展目录
打开phpinfo 知道了 20151012 目录 ,然后 find 一下就知道在哪了
root@freebsd # find / -name 20151012
/usr/local/lib/php/20151012</pre>


update-rc.d cron enable
=SEE ALSO=
[http://www.laruence.com/2015/12/04/3086.html 让PHP7达到最高性能的几个Tips]


update-rc.d cron defaults
[http://www.laruence.com/2015/10/02/3069.html  让你的PHP7更快之Hugepage]
#并且可以指定该服务的启动顺序:
update-rc.d cron defaults 90
还可以更详细的控制start与kill顺序:
update-rc.d apache2 defaults 20 80
其中前面的20是start时的运行顺序级别,80为kill时的级别。也可以写成:
update-rc.d apache2 start 20 2 3 4 5 . stop 80 0 1 6 .


</pre>
[https://linux.cn/article-1537-1.html 谁贪占了我的系统资源 php-fpm]


[[category:php]] [[category:Container]]
[[category:ops]][[category:php]]

2020年4月1日 (三) 05:59的最新版本

Php性能优化


start

0. 我们的优化参数

vi php-fpm.conf 
pm = static
pm.max_children = 400
pm.max_requests = 5000

request_terminate_timeout = 1
request_slowlog_timeout = 1 

1. Opcache

编译时记得加上

--enable-opcache=yes

phpinfo 查看 Zend OPcache 相关的配置还不够完善 有空 再看看 php7安装opcache提升性能 http://php.net/manual/zh/intro.opcache.php

(have Opcache 配置)PHP 7.0性能优化 PHP- 性能加速 - 开启opcache


记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

2. 使用新的编译器

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能


因为centos6.8 gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 而 cenots7 gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-11)

所以建议php7 + centos7 才是最好的搭配


3. HugePage

我之前的文章也介绍过: 让你的PHP7更快之Hugepage , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.

以我的CentOS 6.5为例, 通过:

 sudo sysctl vm.nr_hugepages=512

分配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中加入:

opcache.huge_code_pages=1

这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.

4. Opcache file cache

开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升. 在php.ini中加入:

opcache.file_cache=/tmp
#注意这个在freebsd11 + php7  会导致502 and 504

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

5. PGO

我之前的文章: 让你的PHP7更快(GCC PGO) 也介绍过, 如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能.

具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:

$ make prof-gen

然后用你的项目训练PHP, 比如对于Wordpress:

$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null

也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.

最后:

$ make prof-clean
$ make prof-use && make install

这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.


后记

一个php-cgi 5.3 进程,大概占用多少内存呢,大概是20MB(具体的要看你的php加载了多少模块)。可以通过pmap指令查看哪些地方占用了内存。所以,尽量不要加载不必要的php扩展模块,可以减少不必要的内存浪费。

而php-fpm(php7) 程占用14M左右; ps :php5.6的大概是19M ;

所以建议在打包时 能不要的模块尽量不要喽,虽然php哥都喜欢大而全 哈哈

php进程占用内存的大小,GB为单位 ps --no-headers -o rss -C php-fpm |awk '{ sum+=$1 } END { print (sum/1024/1024,"GB") }' 4.12779 GB


查看php-fpm内存占用命令

php7 on freebsd11

查看php 扩展目录
打开phpinfo 知道了 20151012 目录 ,然后 find 一下就知道在哪了 
root@freebsd # find  /  -name 20151012
/usr/local/lib/php/20151012

SEE ALSO

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

让你的PHP7更快之Hugepage

谁贪占了我的系统资源 php-fpm