温馨提示×

ubuntu环境下如何监控thinkphp运行状态

小樊
65
2025-10-04 02:33:27
栏目: 编程语言

Ubuntu环境下监控ThinkPHP运行状态的方法

1. 命令行工具:实时查看进程与资源使用

  • top/htop
    top是系统自带的实时进程监控工具,输入命令后可按P(CPU使用率)、M(内存使用率)排序,快速定位ThinkPHP进程(通常包含phpphp-fpm关键字);htop是增强版(需安装:sudo apt install htop),提供更直观的界面和颜色标识,支持鼠标操作。
  • ps命令
    通过ps aux | grep php过滤出所有PHP相关进程,查看其CPU、内存占用及运行状态(如D表示不可中断睡眠,Z表示僵尸进程)。
  • systemctl/systemd-cgtop
    若ThinkPHP通过PHP-FPM运行,使用systemctl status php-fpm查看PHP-FPM服务状态(是否active、running);systemd-cgtop则可查看PHP-FPM进程组的资源使用情况(如CPU、内存占比)。

2. 日志分析:追踪运行错误与访问情况

  • Web服务器日志
    • Nginx:访问日志默认位于/var/log/nginx/access.log(记录用户请求的URL、HTTP状态码、响应时间),错误日志位于/var/log/nginx/error.log(记录PHP解析错误、连接超时等);
    • Apache:访问日志位于/var/log/apache2/access.log,错误日志位于/var/log/apache2/error.log
      通过tail -f /var/log/nginx/error.log实时查看错误日志,快速定位ThinkPHP运行中的问题(如数据库连接失败、代码语法错误)。

3. 第三方监控工具:全面性能管理与报警

  • New Relic/Datadog
    这两款APM(应用性能管理)工具可深度监控ThinkPHP应用的性能:
    • New Relic:安装PHP Agent(composer require newrelic/php-agent),在代码中初始化(require_once 'vendor/autoload.php'; NewRelic\Agent\initialize('your_license_key')),即可获取请求响应时间、数据库查询耗时、错误率等指标,并支持实时报警。
    • Datadog:通过composer require datadog/php-dogstatsd安装PHP SDK,配置datadog.yaml文件,监控应用性能并提供可视化 dashboard。
      两者均支持生产环境的大规模应用监控。

4. 进程守护:确保ThinkPHP服务持续运行

  • Supervisor
    若ThinkPHP以命令行模式运行(如Swoole服务、队列任务),可使用Supervisor实现进程守护:
    1. 安装Supervisor:sudo apt install supervisor
    2. 创建配置文件(如/etc/supervisor/conf.d/thinkphp.conf),内容如下:
      [program:thinkphp]
      command=php /path/to/your/thinkphp project/artisan serve --host=0.0.0.0 --port=8000
      directory=/path/to/your/thinkphp project
      autostart=true
      autorestart=true
      user=www-data
      stderr_logfile=/var/log/thinkphp.err.log
      stdout_logfile=/var/log/thinkphp.out.log
      
    3. 重启Supervisor:sudo service supervisor restart
      Supervisor会自动重启崩溃的ThinkPHP进程,并记录日志。

5. 自定义监控:灵活记录业务指标

  • 中间件记录请求时间
    在ThinkPHP中创建自定义中间件(如app/middleware/Monitor.php),记录每个请求的执行时间与内存使用:
    namespace app\middleware;
    use Closure;
    class Monitor
    {
        public function handle($request, Closure $next)
        {
            $start = microtime(true);
            $response = $next($request);
            $end = microtime(true);
            $executionTime = ($end - $start) * 1000; // 转换为毫秒
            $memoryUsage = memory_get_usage(true) / 1024 / 1024; // 转换为MB
            \think\facade\Log::write("Request: {$request->path()} | Time: {$executionTime}ms | Memory: {$memoryUsage}MB");
            return $response;
        }
    }
    
    注册中间件(在app/middleware.php中添加Monitor::class),即可通过日志分析请求性能瓶颈。

以上方法覆盖了从基础到高级的ThinkPHP运行状态监控需求,可根据实际场景选择组合使用(如生产环境用New Relic+Supervisor,开发环境用htop+日志分析)。

0