You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lumen中使用Jessenger关闭MongoDB空闲连接?

解决Lumen+Jessenger MongoDB多连接/空闲连接问题

以下是经实践验证的可靠方案,可有效减少空闲连接、降低资源消耗:

1. 复用单例连接

在Lumen容器中绑定MongoDB连接为单例,确保每个请求周期内仅创建一次连接,而非每个API接口都新建。

在App\Providers\AppServiceProvider.php的register方法中添加:

$this->app->singleton('mongo.connection', function ($app) {
    $config = $app['config']->get('database.connections.mongodb');
    $client = new \MongoDB\Client($config['dsn'], $config['options']);
    return $client->selectDatabase($config['database']);
});

后续业务代码中通过app('mongo.connection')获取连接实例,替代每次手动创建新连接。

2. 请求结束主动关闭连接

通过全局中间件,在每个请求处理完成后主动关闭MongoDB连接,避免连接滞留在php-fpm进程中。

步骤1:创建中间件

新建App\Http\Middleware\CloseMongoConnection.php:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class CloseMongoConnection
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        
        // 关闭MongoDB客户端连接
        $mongoClient = App::get('mongo.connection')?->getClient();
        if ($mongoClient) {
            $mongoClient->close();
        }
        
        return $response;
    }
}

步骤2:注册中间件

在bootstrap/app.php中注册全局中间件:

$app->middleware([
    App\Http\Middleware\CloseMongoConnection::class,
]);

3. 配置MongoDB连接池

利用MongoDB驱动的连接池功能,自动复用连接、回收空闲连接,从根源减少连接创建次数。

在config/database.php的MongoDB连接配置中添加连接池参数:

'mongodb' => [
    'driver' => 'mongodb',
    'dsn' => env('MONGODB_URI'),
    'database' => env('MONGODB_DATABASE'),
    'options' => [
        'poolSize' => 15, // 单进程最大连接数,根据服务器配置调整
        'maxIdleTimeMS' => 30000, // 空闲连接超时回收时间(30秒)
        'waitQueueTimeoutMS' => 1000, // 获取连接超时时间(1秒)
    ],
],

4. 优化php-fpm进程配置

结合连接池调整php-fpm参数,控制进程数量,避免因进程过多导致连接数爆炸。推荐使用dynamic模式,示例配置:

pm = dynamic
pm.max_children = 60
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 24
pm.process_idle_timeout = 15s;

实践注意事项

  • 单例连接需配合请求结束关闭逻辑,避免php-fpm进程复用旧连接导致连接失效;
  • 连接池poolSize需根据MongoDB服务器的maxConnections(默认1000)调整,确保总连接数不超过MongoDB承载上限;
  • 压力测试前需模拟真实业务场景,验证连接数、进程数的合理性。

内容的提问来源于stack exchange,提问作者Shahid Rafiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:53:00