Skip to content

4.配置说明

mc² edited this page May 19, 2020 · 1 revision

配置说明

执行命令 php artisan http publish 会创建 fast-laravel 的配置文件。位于 config 目录下的 swoole_http.php 文件中。

热重载

建议生产环境关闭该服务。仅限开发时使用。

  • hot_reload: 是否开启热重载
  • hot_reload_type: 热重载类型,支持 inotifytick
    • inotify 依赖 inotify PHP 扩展
    • tick 是利用 swoole 定时器,定时检测文件是否变化,进而进行 reload 操作
  • hot_reload_paths: 监控的文件变更目录。只要属于目录类的文件,发送变动,就会进行 reload
    'server'    => [
        'hot_reload'          => env('SWOOLE_HOT_RELOAD', false),
        'hot_reload_type'     => env('SWOOLE_HOT_RELOAD_TYPE', ''),// inotify or tick
        'hot_reload_paths'    => [
            base_path('app'),
            base_path('config'),
        ],
    ]

内存限制

由于框架中会存在加载很多包。然而这些包是适用于 php-fpm 环境。每次请求结束都会进行清理操作无须关注内存泄漏。但是在常驻内存模式下,就会造成内存泄漏。如果不定期回收,PHP执行过程中可能存在致命错误 Fatal error: Allowed memory size of xxxxx bytes

所以需要对内存进行限制。如果超过了内存限制(字节),服务将在请求结束时重新启动

  • worker_memory_limit:进程内存限制,超出限制reload操作
  • task_memory_limit:任务进程内存限制,超出限制reload操作
  • max_request:最大请求数,解决由于程序编码不规范导致的PHP进程内存泄露问题
  • task_max_request:设置 task 进程的最大任务数,解决由于程序编码不规范导致的PHP进程内存泄露问题
    'server'    => [
        'worker_memory_limit' => env('SWOOLE_WORKER_MEMORY_LIMIT', 200 * 1024 * 1024),
        'task_memory_limit'   => env('SWOOLE_TASK_MEMORY_LIMIT', 200 * 1024 * 1024),
        'options' => [
            ...
            'max_request'       => 3000,
            'task_max_request'  => 3000,
            ...
        ]
    ]

沙盒模式

沙盒模式下,请求结束会清空请求信息。非沙盒只能用于简单的项目。强烈建议沙盒环境。

  • sandbox_mode:是否开启沙盒模式 true、false

举个例子:

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class TestController extends Controller {
    protected $time;
    public function __construct() {
        $this->time = time();
    }

    public function getList() {
        return response()->json([
            'time' => $this->time
        ]);
    }
}

沙盒环境下每次请求都会重新创建 TestController 这样 time随请求时间变化而变化。非沙盒环境下,不会重新创建TestController会导致每次请求获取到的time都一致。

性能分析

依赖 tidewaystideways_xhprof PHP 扩展。 依赖 xhgui

  • enable:是否开启性能分析
  • handler:数据存储支持 mongodbfile
  • filename:handler=file 时使用,每次请求保存的性能分析文件的文件名
  • db:mongodb 服务信息
  • profiler:分析器
    • enable:控制监控频率
    • simple_url:如果url过长的话,可以在这里简化url
    • filter_path:以下地址不进行监控
    /*
    |--------------------------------------------------------------------------
    | HTTP server APM tracker.
    |--------------------------------------------------------------------------
    | based on xhgui,tideways or tideways_xhprof.
    | see:https://github.com/tideways/php-xhprof-extension
    | see:https://github.com/perftools/xhgui
    */
    'tracker' => [
        'enable'   => false,
        'handler'  => 'mongodb', // only support mongodb and file
        'filename' => function ($url) {
            $time = microtime(true);
            $url = substr(md5($url), 0, 6);
            return storage_path("tracker/xhgui.data.{$time}_{$url}");
        },

        'db' => [
            'host'    => 'mongodb://localhost:27017/xhprof',
            'db'      => 'xhprof',
            'options' => [],
        ],

        // Profile 1 in 100 requests. You can return true to profile every request.
        'profiler' => [
            'enable'      => function ($illuminateRequest) {
                return (bool) $illuminateRequest->cookie('enable_apm'); //rand(1, 100) === 42;
            },
            'simple_url'  => function ($url) {
                return preg_replace('/\=\d+/', '', $url);
            },
            'filter_path' => [
                '/api/test'
            ]
        ],
    ],

自定义进程

自定义进程需继承 FastLaravel\Http\Process\BaseProcess 必须实现 run(Swoole\Process) 函数

    /*
    |--------------------------------------------------------------------------
    | User-defined processes
    | eg:  \App\Service\UserProcesses::class => 'processName'
    |--------------------------------------------------------------------------
    */
    'processes' => [
        // FastLaravel\Http\Process\Crond::class => 'crond',
    ],

Crontab 任务

内置crontab任务支持。任务规则与crontab保持一致,增加秒支持。启用crontab,需要在自定义进程中配置,FastLaravel\Http\Process\Crond::class => 'crond'

    /*
    |--------------------------------------------------------------------------
    | User-defined crontab jobs
    | 规则:秒 分 时 日 月 周
    |--------------------------------------------------------------------------
    */
    'crontab' => [
        [
            // 任务说明信息
            'class'  => App\Service\FooTask::class,
            'method' => 'execute',
            'cron'   => '* * * * * *',
        ],
    ],
Clone this wiki locally