ThinkPHP内置了日志功能,可通过日志快速定位应用运行问题。日志默认存储在项目目录的runtime/log文件夹下(如app.log记录常规日志、error.log记录错误日志)。
tail -f /path/to/thinkphp-project/runtime/log/app.log命令,实时跟踪最新日志输出。grep命令过滤关键字,例如查看2025年10月6日的错误日志:grep '2025-10-06' /path/to/thinkphp-project/runtime/log/error.log。通过CentOS系统自带的命令行工具,可实时监控ThinkPHP进程的资源占用情况:
top或htop(需安装,yum install htop)命令,按P键按CPU使用率排序,按M键按内存使用率排序,快速定位高消耗的ThinkPHP进程。ps aux | grep php | wc -l,查看当前运行的PHP进程总数,判断是否存在进程异常增长。df -h,检查服务器磁盘空间是否充足(避免因磁盘满导致ThinkPHP无法写入日志或缓存)。netstat -tulnp | grep php,查看ThinkPHP进程的网络连接状态,排查端口占用问题。通过自定义中间件,可记录ThinkPHP应用的请求耗时、内存使用等性能数据,并写入日志或发送到监控系统:
app/middleware目录下新建PerformanceMiddleware.php文件,代码如下:namespace app\middleware;
use think\facade\Log;
use think\Middleware\BaseMiddleware;
class PerformanceMiddleware extends BaseMiddleware
{
    public function handle($request, \Closure $next)
    {
        $start_time = microtime(true);
        $response = $next($request);
        $end_time = microtime(true);
        $cost_time = $end_time - $start_time;
        $memory_usage = memory_get_usage() / 1024 / 1024; // 转换为MB
        Log::info("请求路径: {$request->path()}, 耗时: {$cost_time}秒, 内存使用: {$memory_usage}MB");
        return $response;
    }
}
app/middleware.php中添加中间件,使其生效:return ['app\middleware\PerformanceMiddleware'];
执行后,所有请求的性能数据会记录到runtime/log目录下的日志文件中。第三方APM工具可实现更专业的性能监控和可视化,适合生产环境:
prometheus.yml文件,添加ThinkPHP应用的指标抓取任务(需ThinkPHP暴露指标接口)。think-prometheus),让ThinkPHP应用暴露/metrics接口,输出Prometheus格式的指标数据(如请求次数、响应时间、错误率)。ThinkPHP Grafana Dashboard),实现性能数据的可视化展示(如请求耗时趋势图、错误率报警)。若不想自建监控系统,可使用成熟的第三方服务,快速实现ThinkPHP监控:
API Key和Application Key。composer require datadog/php-datadogstatsd,安装Datadog PHP SDK。config/datadog.php文件,配置Datadog Agent地址和标签:return [
    'host' => 'localhost',
    'port' => 8125,
    'namespace' => 'thinkphp_app',
    'tags' => ['env:production'],
];
app/provider.php中注册Datadog服务:namespace app;
use think\Service;
use DataDog\DogStatsd;
class DatadogService extends Service
{
    public function register()
    {
        $this->app->bind('datadog', function () {
            $config = config('datadog');
            return new DogStatsd($config);
        });
    }
}
namespace app\controller;
use think\Controller;
use think\facade\App;
class Index extends Controller
{
    public function index()
    {
        $datadog = App::make('datadog');
        $start_time = microtime(true);
        // 业务逻辑代码
        $elapsed_time = microtime(true) - $start_time;
        $datadog->timing('index.request_time', $elapsed_time);
        return 'Hello, ThinkPHP!';
    }
}
通过监控ThinkPHP应用的端口(如80、443或自定义端口),确保应用服务正常运行:
/path/to/script/check_port.sh文件,内容如下:#!/bin/bash
PORT=80 # 替换为ThinkPHP应用的端口
if netstat -tulnp | grep -q ":$PORT "; then
    echo "$(date): Port $PORT is running."
else
    echo "$(date): Port $PORT is down!" | mail -s "ThinkPHP Port Down Alert" admin@example.com
fi
crontab -e命令添加定时任务,每2分钟执行一次脚本:*/2 * * * * /bin/bash /path/to/script/check_port.sh
当端口未监听时,脚本会发送邮件报警(需配置邮件服务)。以上方法可根据实际需求组合使用,例如:小型项目可采用日志监控+系统命令,中大型项目建议采用第三方APM工具+端口监控,以实现全面的ThinkPHP监控。