Linux环境下ThinkPHP如何监控
导读:Linux环境下 ThinkPHP 监控实践 一 进程守护与自动重启 使用Supervisor管理常驻进程(如队列、Workerman、Swoole),异常退出可自动拉起,并提供标准化启停与日志能力。 安装与启用(以 CentOS 为例)...
Linux环境下 ThinkPHP 监控实践
一 进程守护与自动重启
- 使用Supervisor管理常驻进程(如队列、Workerman、Swoole),异常退出可自动拉起,并提供标准化启停与日志能力。
- 安装与启用(以 CentOS 为例):
- 安装:
yum install -y supervisor - 验证:
supervisord -v - 开机自启:
systemctl enable --now supervisord
- 安装:
- 队列示例(think-queue 常驻监听):
- 配置文件:
/etc/supervisord.d-queue.ini[program:think-queue] command=/usr/bin/php /data/www queue:listen directory=/data/www/your-project process_name=%(process_num)02d numprocs=2 autostart=true autorestart=true startsecs=5 startretries=5 redirect_stderr=true stdout_logfile=/var/log-queue.out.log stderr_logfile=/var/log-queue.err.log user=www-data - 常用命令:
- 启动/重载:
supervisorctl start think-queue,supervisorctl update(热更新配置) - 状态/重启:
supervisorctl status,supervisorctl restart think-queue
- 启动/重载:
- 配置文件:
- 多进程与多端口守护(如 Swoole/Workerman 多端口服务):
- 通过多 program分别守护不同端口,或用numprocs+process_name扩展多个 worker;必要时在程序内做端口自检与报警(如用 Swoole 定时器探测监听端口存活)。
二 应用性能与业务指标监控
- APM 与指标上报(生产推荐):
- 集成Datadog PHP Library(datadog/php-datadogstatsd),在服务启动时绑定 DogStatsd,记录请求耗时、队列处理时长、异常计数等自定义指标,并在控制台进行可视化与告警配置。
- 快速接入示例:
- 安装:
composer require datadog/php-datadogstatsd - 配置:
config/datadog.php(设置 agent 地址、端口、命名空间与标签) - 使用(在控制器/队列任务中):
use DataDog\DogStatsd; $statsd = new DogStatsd(['host'=> '127.0.0.1','port'=> 8125,'namespace'=> 'tp_app']); $start = microtime(true); // ...业务逻辑... $statsd-> timing('tp.request.duration', (microtime(true)-$start)*1000, ['route'=> '/index']); $statsd-> increment('tp.job.processed', 1, ['queue'=> 'default']);
- 安装:
- 代码级性能剖析(问题定位阶段):
- 使用XHProf采集函数调用次数、CPU、内存等指标,定位慢函数与热点路径;适合临时开启的深度分析,不建议长期开启以免影响性能。
三 系统资源与健康监控
- 主机层面建议常驻监控:
- 资源监控:htop(交互式资源)、vmstat、iostat、sar、dstat、glances,覆盖CPU、内存、磁盘 I/O、网络等核心指标,便于发现瓶颈与异常抖动。
- 日志与告警:将 Supervisor 与业务日志接入集中式日志平台(如 ELK/EFK),对进程崩溃、队列积压、异常日志激增设置阈值告警,缩短 MTTR。
四 ThinkPHP 内置能力与开发调试
- 开发/预发环境建议开启调试面板与日志,快速查看请求信息、SQL、耗时等;生产环境关闭调试模式,仅保留必要日志级别与异常记录。
- 自定义中间件记录请求耗时,便于无侵入地观测接口性能:
namespace app\middleware; use think\facade\Request; use think\facade\Log; class PerformanceLogger { public function handle($request, \Closure $next) { $start = microtime(true); $response = $next($request); $duration = (microtime(true) - $start) * 1000; // ms Log::info("Request to ".Request::url()." took ".round($duration,2)."ms"); return $response; } } - 异常统一处理:配置exception_handle,在捕获未处理异常时记录堆栈与上下文,并结合告警策略提升可观测性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下ThinkPHP如何监控
本文地址: https://pptw.com/jishu/757409.html
