mirror of
https://github.com/shlinkio/shlink.git
synced 2026-02-28 04:03:12 +08:00
Garbage collect after every request
This commit is contained in:
17
CHANGELOG.md
17
CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
|
The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
|
||||||
|
|
||||||
|
## [4.5.2] - 2025-08-27
|
||||||
|
### Added
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* [#2433](https://github.com/shlinkio/shlink/issues/2433) Try to mitigate memory leaks allowing RoadRunner to garbage collect memory after every request and every job, by setting `GC_COLLECT_CYCLES=true`.
|
||||||
|
|
||||||
|
|
||||||
## [4.5.1] - 2025-08-24
|
## [4.5.1] - 2025-08-24
|
||||||
### Added
|
### Added
|
||||||
* *Nothing*
|
* *Nothing*
|
||||||
|
|||||||
@@ -2,18 +2,22 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Shlinkio\Shlink;
|
||||||
|
|
||||||
use Mezzio\Application;
|
use Mezzio\Application;
|
||||||
use Psr\Container\ContainerInterface;
|
use Psr\Container\ContainerInterface;
|
||||||
use Shlinkio\Shlink\Common\Middleware\RequestIdMiddleware;
|
use Shlinkio\Shlink\Common\Middleware\RequestIdMiddleware;
|
||||||
use Shlinkio\Shlink\EventDispatcher\RoadRunner\RoadRunnerTaskConsumerToListener;
|
use Shlinkio\Shlink\EventDispatcher\RoadRunner\RoadRunnerTaskConsumerToListener;
|
||||||
use Spiral\RoadRunner\Http\PSR7Worker;
|
use Spiral\RoadRunner\Http\PSR7Worker;
|
||||||
|
|
||||||
|
use function gc_collect_cycles;
|
||||||
use function Shlinkio\Shlink\Config\env;
|
use function Shlinkio\Shlink\Config\env;
|
||||||
|
|
||||||
(static function (): void {
|
(static function (): void {
|
||||||
/** @var ContainerInterface $container */
|
/** @var ContainerInterface $container */
|
||||||
$container = include __DIR__ . '/../config/container.php';
|
$container = include __DIR__ . '/../config/container.php';
|
||||||
$rrMode = env('RR_MODE');
|
$rrMode = env('RR_MODE');
|
||||||
|
$gcCollectCycles = env('GC_COLLECT_CYCLES', default: false);
|
||||||
|
|
||||||
if ($rrMode === 'http') {
|
if ($rrMode === 'http') {
|
||||||
// This was spin-up as a web worker
|
// This was spin-up as a web worker
|
||||||
@@ -25,6 +29,10 @@ use function Shlinkio\Shlink\Config\env;
|
|||||||
$worker->respond($app->handle($req));
|
$worker->respond($app->handle($req));
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
$worker->getWorker()->error((string) $e);
|
$worker->getWorker()->error((string) $e);
|
||||||
|
} finally {
|
||||||
|
if ($gcCollectCycles) {
|
||||||
|
gc_collect_cycles();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"shlinkio/doctrine-specification": "^2.2",
|
"shlinkio/doctrine-specification": "^2.2",
|
||||||
"shlinkio/shlink-common": "^7.1",
|
"shlinkio/shlink-common": "^7.1",
|
||||||
"shlinkio/shlink-config": "^4.0",
|
"shlinkio/shlink-config": "^4.0",
|
||||||
"shlinkio/shlink-event-dispatcher": "^4.2",
|
"shlinkio/shlink-event-dispatcher": "^4.3",
|
||||||
"shlinkio/shlink-importer": "^5.6",
|
"shlinkio/shlink-importer": "^5.6",
|
||||||
"shlinkio/shlink-installer": "^9.6",
|
"shlinkio/shlink-installer": "^9.6",
|
||||||
"shlinkio/shlink-ip-geolocation": "^4.3",
|
"shlinkio/shlink-ip-geolocation": "^4.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user