-
Notifications
You must be signed in to change notification settings - Fork 9
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
: 热重载类型,支持inotify
和tick
-
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
都一致。
依赖 tideways 或 tideways_xhprof PHP 扩展。 依赖 xhgui
- enable:是否开启性能分析
- handler:数据存储支持
mongodb
和file
- 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,需要在自定义进程中配置,FastLaravel\Http\Process\Crond::class => 'crond'
/*
|--------------------------------------------------------------------------
| User-defined crontab jobs
| 规则:秒 分 时 日 月 周
|--------------------------------------------------------------------------
*/
'crontab' => [
[
// 任务说明信息
'class' => App\Service\FooTask::class,
'method' => 'execute',
'cron' => '* * * * * *',
],
],