php项目接入new relic必须安装newrelic.so扩展(非composer),仅支持linux/macos、php 7.2–8.3非zts版本;需用官方脚本安装、正确配置ini、重启服务,并确保系统时间同步。

PHP 项目要接入 New Relic 实现应用性能监控,核心前提是:必须安装并启用 newrelic.so 扩展,且不能只靠 Composer 引入 SDK —— New Relic PHP Agent 是 C 扩展级的探针,不是纯 PHP 库。
确认服务器环境是否支持 New Relic PHP Agent
New Relic 官方仅提供预编译的 newrelic.so(Linux/macOS),不支持 Windows(2024 年起已明确弃用 Windows 支持);同时要求 PHP 版本在 7.2–8.3 范围内,且不能是 ZTS(线程安全)版本(即 php -i | grep "Thread Safety" 必须显示 disabled)。
- 运行
php -v检查 PHP 主版本和 ZTS 状态 - 运行
uname -m确认架构(x86_64/aarch64),New Relic 不提供 i386 或 armv7 包 - 若用 Docker,基础镜像需为
php:apache或php:fpm非-ZTS 版本,避免php:alpine(musl libc 不兼容)
正确安装 newrelic.so 扩展(非 Composer)
Composer 安装 newrelic/newrelic 包毫无作用——它只是个空桩,实际监控完全依赖 newrelic.so。官方推荐使用一键脚本安装:
curl -Ls https://download.newrelic.com/install/newrelic-php5.sh | bash -s -- -y -k YOUR_LICENSE_KEY
该脚本会自动检测 PHP 安装路径、版本、SAPI 类型(cli/fpm/apache2handler),并写入 newrelic.ini 到 php.ini 扫描目录(如 /etc/php/8.1/fpm/conf.d/)。
- 安装后务必重启 PHP 进程:
systemctl restart php8.1-fpm或service apache2 restart - 验证是否加载成功:
php -m | grep newrelic(应输出newrelic) - 若报错
undefined symbol: zend_empty_string,说明扩展与 PHP 版本 ABI 不匹配,需清空/usr/local/newrelic后重装
配置 newrelic.app_name 和 license_key 不生效?检查 ini 加载顺序
newrelic.app_name 和 newrelic.license 必须写在被 PHP 实际加载的 .ini 文件中,且不能被后续文件覆盖。常见失效原因:
- 多个
newrelic.ini共存(如/etc/php/8.1/fpm/conf.d/20-newrelic.ini和/usr/local/etc/php/conf.d/docker-php-ext-newrelic.ini),后者可能覆盖前者 - 在
php.ini里用newrelic.app_name = "MyApp"但未启用扩展(extension=newrelic.so缺失或注释) - FPM 场景下,CLI 和 Web 请求读取不同配置:用
phpinfo()页面确认Loaded Configuration File和Additional .ini files parsed路径
最稳妥方式:在 conf.d/ 下新建唯一 99-newrelic.ini,内容仅含三行:
extension=newrelic.so newrelic.license="YOUR_LICENSE_KEY" newrelic.app_name="MyApp"
Web 事务没数据?检查 SAPI 类型和 auto-instrumentation 开关
New Relic 默认只对 fpm 和 apache2handler 自动追踪 HTTP 请求;若用 php -S、Swoole、RoadRunner 或 CLI 脚本,需手动调用 newrelic_start_transaction()。
- FPM 下无数据:检查
newrelic.daemon.location是否指向正确的守护进程路径(默认/var/run/newrelic/newrelic-daemon.sock),并确认newrelic.daemon.port未被防火墙拦截 - Apache 下 500 错误:可能是
newrelic.daemon.ssl设为on但本地 daemon 未启用 SSL,改为off - 想追踪 CLI 命令(如 Laravel Artisan):在脚本开头加
if (extension_loaded('newrelic')) { newrelic_start_transaction('CLI', 'artisan'); },结尾调用newrelic_end_transaction()
所有配置项变更后,必须重启 PHP 进程和服务守护进程(systemctl restart newrelic-daemon),仅 reload 不生效。
最容易被忽略的是:Agent 初始化依赖系统时间同步(NTP),若服务器时间偏差 > 30 秒,daemon 会拒绝上报数据,且日志中几乎不提示——先 timedatectl status 确认时间准确再排查其他问题。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











