-
Notifications
You must be signed in to change notification settings - Fork 473
Description
- Your software version (Screenshot of your startup)
+--------------------------+---------+
| Component | Version |
+--------------------------+---------+
| PHP | 7.4.33 |
| Swoole | 4.8.13 |
| LaravelS | 3.7.36 |
| Laravel Framework [prod] | 8.25.0 |
+--------------------------+---------+
- Detail description about this issue(error/log)
The problem is that I observe an increase in the response time from the server if it works for a certain time without restarting laravel-s.
I started researching it to understand where the problem is and I realized that it happens at the moment of $laravel->cleanProviders(); in handleDynamicResource
My log looks something like this:
end
[2024-02-24 02:40:59] prod.INFO: Time test onRequest handleDynamicResource end [43.0391]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource clean [42.933]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource send [42.455]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource setChunkLimit [42.295]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource end [42.2001]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource DynamicResponse end [42.105]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource DynamicResponse start [42.0079]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource fireEvent [41.909]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource setServer [41.7759]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource handleDynamic [41.6529]
[2024-02-24 02:40:59] prod.DEBUG: Time test route [40.9729]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource cleanProviders [39.9721]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders register 2 end [39.839]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders register 2 start [4.1599]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders class_exists [3.9661]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders provider [3.768,"Tymon\\JWTAuth\\Providers\\LaravelServiceProvider"]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders loadedProviders [3.577]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders start [3.376]
[2024-02-24 02:40:59] prod.INFO: Time test handleDynamicResource start [3.1719]
[2024-02-24 02:40:59] prod.INFO: Time test onRequest handleStaticResource [2.9171]
[2024-02-24 02:40:59] prod.INFO: Time test onRequest fireEvent [2.7149]
[2024-02-24 02:40:59] prod.INFO: Time test onRequest bindRequest [2.4419]
[2024-02-24 02:40:59] prod.INFO: Time test onRequest convertRequest [2.182]
[2024-02-24 02:40:59] prod.INFO: Time test onRequest [0.0439]
start
As you can see, the problem occurs at this step
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders register 2 end [39.839]
[2024-02-24 02:40:59] prod.INFO: Time test cleanProviders register 2 start [4.1599]
Now it is 35 milliseconds, but it can reach up to 200 milliseconds.
As I understood, this happens when cleaning Tymon\JWTAuth\Providers\LaravelServiceProvider, but how can I fix it? Please help me with this.
- Some
reproducible
code blocks andsteps
'register_providers' => [
\Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
'cleaners' => [
Hhxsv5\LaravelS\Illuminate\Cleaners\SessionCleaner::class,
Hhxsv5\LaravelS\Illuminate\Cleaners\AuthCleaner::class,
Hhxsv5\LaravelS\Illuminate\Cleaners\JWTCleaner::class,
Hhxsv5\LaravelS\Illuminate\Cleaners\ConfigCleaner::class,
\App\Cleaners\EventsCleaner::class,
\App\Cleaners\SocialiteCleaner::class,
],
The part of the code where this happens
public function cleanProviders($log)
{
$loadedProviders = $this->reflectionApp->loadedProviders();
foreach ($this->providers as $provider) {
if (class_exists($provider, false)) {
if ($this->config['is_lumen']) {
unset($loadedProviders[get_class(new $provider($this->currentApp))]);
}
switch ($this->reflectionApp->registerMethodParameterCount()) {
case 1:
$this->currentApp->register($provider);
break;
case 2:
if ($log) {
\Log::info('Time test cleanProviders register 2 start', [round((microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"])*1000, 4)]);
}
$this->currentApp->register($provider, true);
if ($log) {
\Log::info('Time test cleanProviders register 2 end', [round((microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"])*1000, 4)]);
}
break;
case 3:
$this->currentApp->register($provider, [], true);
break;
default:
throw new \RuntimeException('The number of parameters of the register method is unknown.');
}
}
}
if ($this->config['is_lumen']) {
$this->reflectionApp->setLoadedProviders($loadedProviders);
}
}