生产环境下php的`opcache`启动不了啊
cgfeel opened this issue · comments
使用的镜像:
- khs1994/php:7.4.3-fpm-alpine
- khs1994/php:8.1.1-s6-alpine
一开始我是修改php.production.ini
,后来在phpinfo
中发现opcache
调用的是 /usr/local/etc/php/conf.d/php-ext-opcache.ini
,于是我就做了个数据卷,替换默认的的php-ext-opcache.ini
,重启服务,发现opcache
还是没启动起来
于是我就去容器总看数据卷是否已配置成功
$ docker exec -it eed9f34ee774 cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
然后我想可能是网页缓存,我就给链接随意加了个参数?t=2342342
,还是没有启动起来,请问这是怎么回事呢?
手动重启php-fpm
好像也不管用的
$ docker exec -it 0e8c24db170d kill -USR2 1
$ docker exec -it 0e8c24db170d ps aux
PID USER TIME COMMAND
1 root 0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
23 www-data 0:00 php-fpm: pool www
24 www-data 0:00 php-fpm: pool www
25 root 0:00 ps aux
$ docker exec -it 0e8c24db170d php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
...
$ docker exec -it 0e8c24db170d cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1
上面是在镜像khs1994/php:7.4.3-fpm-alpine
看到的情况,我切换到默认提供的khs1994/php:8.1.1-s6-alpine
也存在一样的问题
$ docker exec -it 4bc3dda7cbc2 php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
opcache.enable_cli => On => On
$ docker exec -it 0e8c24db170d cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1
即便把扩展指向绝对路径,也不管用的
$ docker exec -it 8220b093e999 php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
...
$ docker exec -it 8220b093e999 cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1
$ docker exec -it 8220b093e999 ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
我查到配置文件有这么一段
- source: php7_fpm_conf_d_zz_docker_conf
target: /usr/local/etc/php-fpm.d/zz-docker.conf
打开php7_fpm_conf_d_zz_docker_conf
对应的zz-docker.production.conf
,包含了opcache
和xdebug
,其中opcache
是通过这样启动的:
opcache.enable=${LNMP_OPCACHE_ENABLE}
于是我就将配置文件添加环境变量:
php7:
environment:
- APP_ENV=production
- LNMP_DOCKER_VERSION=v20.10 x86_64 Docker Swarm
- LNMP_OPCACHE_ENABLE=1
问题解决了
怎么配置多个站点和切换多个版本的PHP呢,例如配置abc.com的PHP版本为PHP5.6,bbc.com的版本为PHP7.2,jkr.do的PHP版本为PHP8.1,有没有官方案例,没看懂