如何关闭Postgres中的非活动连接

时间:2015-06-27 13:02:02

标签: apache postgresql asp.net-mvc-3 mono npgsql

Postgres 9.1服务器在Debian下运行。 它由Mono MVC4 Web应用程序使用ngpsql,Apache和mod_mono访问。 它也可以在每晚由同一台计算机上的pg_dump访问,也可以从互联网上的5432端口访问。 连接在6月20日被清除。 pgAdmin statuc窗口显示从这天开始的大量空闲连接。 (见下图)。

经过一段时间后,连接数达到100,服务器停止接受连接。需要在pgAdmin中手动终止连接。只有在该服务器再次开始接受连接之后。

有趣的是,其中一些连接的开始时间与图像中显示的完全相同。 如何解决或诊断问题? 我试过了/etc/init.d/apache2 restart。关闭了6月25日和27日的连接,但6月20日的连接仍然开放。

如何自动关闭空闲连接或找到打开连接的原因?也许有一些postgres或Debian设置会自动关闭空闲连接?

open 使用

"在x86_64-unknown-linux-gnu上的PostgreSQL 9.1.2,由gcc-4.4 .real编译(Debian 4.4.5-8)4.4.5,64位"

更新

应用程序使用以下连接字符串:

    NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder()
    {
        SearchPath = schema == null ? "public" : schema + ",public",
        Timeout = 115,
        CommandTimeout = 115,
        Host = Config.Server,
        Database = Config.DefaultDataBase,
        UserName = Config.ServerUser,
        Port = Config.Port,
        // Apache allows 150 connections, MaxPoolSize is set accordingly:
        MaxPoolSize = 155
    };

1 个答案:

答案 0 :(得分:0)

查看此帖子Is there a timeout for idle PostgreSQL connections?

考虑在数据库前使用pgbouncer。