php无法加载bcmath扩展

背景:

线上某台机器安装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种运行方式:
  1. CGI / fast - CGI

  2. CLI (命令行)

  3. apache module

  4. 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

你可能感兴趣的:(php无法加载bcmath扩展)