背景:
线上某台机器安装php的bcmath扩展后可以使用命令行运行, 但是服务偶发异常, 在使用某些功能的时候偶发出现错误
PHP Startup: Unable to load dynamic library 'php_extension_dir/bcmath.so' - /lib64/libc.so.6: version `GLIBC_2.14' not found (required by php_extension_dir/bcmath.so)"
定位 :
检查扩展情况:
php - m | grep bcmath => 正常
php -i | grep bcmath => 正常
php -a > echo bcdiv(2,1,1); => 正常
检查GLIBC_2.14系统依赖:
ll /lib64/libc.so.6 => /lib64/libc.so.6 -> /lib64/libc-2.14.1.so 版本正常
ll /lib64/libc-2.14.1.so => 文件存在
strings /lib64/libc.so.6 | grep GLIBC_2.1 => 2.14存在
检查启动方式:
php -a > echo PHP_SAPI; => CLI
解决方法 :
kill -USER2 master进程号 (php > 5.3.3版本,fpm平滑重启并重新载入扩展和配置命令)
检查异常情况 : 无异常
补充:
php 4种运行方式:
CGI / fast - CGI
CLI (命令行)
apache module
ISAPI (iis支持)
使用 echo PHP_SAPI 查看当前使用的运行方式
php-fpm 生命周期 : 创建到消亡
查看php-fpm.conf , 或其引入的其他配置文件, 找到 pm 配置
pm = static 固定子进程数量
pm = ondemand 有需求时创建
pm = dynamic 在max_children + start_servers的基础下动态伸缩
pm.start_servers 启动时默认子进程数
pm.min_spare_servers 最低空闲进程数
pm.max_spare_servers 最大空闲进程数
pm.max_children 允许最大子进程数
pm.process_idle_timeout 大于这个空闲时间(秒)后, 子进程会被kill; 设置防止内存泄露
如果子进程数小于pm.min_spare_servers, 会创建进程到pm.min_spare_servers 个
如果子进程数大于pm.max_spare_servers , 会杀死大于pm.max_spare_servers个空闲进程
如果子进程运行时间大于process_idle_timeout, 这个进程会被杀死
如果进程数超过pm.max_children个, 可能出现50X错误
php-fpm.conf 配置解析: https://www.cnblogs.com/chunguang/p/5538478.html