当前位置: 首页 > 面试题库 >

Arval SQLException:致命:抱歉,postgres中已有太多客户端

羊刚捷
2023-03-14
问题内容

我正在PostgreSQL
9.1中使用数据库,该数据库中的条目连续来自另一个程序。我正在6秒后从Ajax发送请求以获取最新条目.tomcat输出窗口显示异常—

Arval SQLException: FATAL: sorry, too many clients already

之后程序也可以正常工作。当我通过查询检查我的postgres时-

select count(*) from pg_stat_activity;

它表明连接不断增加,但是在每个请求之后我都关闭了连接。我正在使用netbeans和struts 1.3。

     long previousSNO = Long.parseLong(request.getParameter("previousSNO"));
    if(previousSNO == 0)
    {
        sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp ORDER BY search_date DESC LIMIT 20");
        prest = cb.executeSQLQuery(sb.toString());
        rs = prest.executeQuery();
    }
    else
    {
        sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp WHERE sno > ? ORDER BY search_date DESC");
        prest = cb.executeSQLQuery(sb.toString());    
        prest.setLong(1, previousSNO);
        rs = prest.executeQuery();
    }
    rs.last();
    int c = rs.getRow();
    rs.beforeFirst();

    if(rs!=null && c>0)
    {    
    //code for making json resultsb from resultset here    
    rs.close();
    }
    cb.closeConnection();
    response.setContentType("text/plain");
    response.getWriter().print(resultsb.toString());

//连接bean中的关闭方法是

    public void closeConnection() {
    try {
        // st.close();
        conn.close();
        System.out.println("con is closed");
        conn = null;

    } catch (SQLException e) {
        e.getMessage();
        System.out.println(e.getMessage());
        System.out.println("con is not closed");
    }
}

每次在控制台“ con上关闭”打印时;


问题答案:

您可以在postgres中增加max_connections,但这不是解决方案。您有资源泄漏。可以是任何-连接未关闭,结果集未关闭。请返回并检查代码。

考虑使用连接池库

关于连接池的一般讨论在这里
(感谢@ sinisa229 mihajlovski)



 类似资料: