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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容