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

我在PostgreSQL 9.1中使用一个数据库,其中来自另一个程序的入口是连续的。 我在6秒后从Ajax发送请求来获取最新的entry.tomcat输出窗口显示exception—

Arval SQLException: FATAL: sorry, too many clients already 

此后程序也正常工作。 当我查询我的postgres查询—

 select count(*) from pg_stat_activity; 

它表明,连接不断增加,但我closures每个请求后的连接。我使用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中的close方法是

  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"); } } 

每次在控制台“conclosures”时打印;

Solutions Collecting From Web of "Arval SQLException:致命:抱歉,太多的客户端已经在postgres中"

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

考虑使用像c3p0 / BoneCp这样的连接池库

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

要增加连接限制,您可能会喜欢以下文档。

这个解决方案在Ubuntu 12.04上测试过。

1.在postgresql.conf文件中进行以下更改:

打开/etc/postgresql/9.1/main/postgresql.conf

 max_connections = 200 shared_buffers = 100MB max_files_per_process = 100 

参考: shared_buffers的大小应该小于shmmax的大小。

2.检查shmmax的命令:

 $ sysctl -e kernel.shmmax $ ipcs -l 

参考: 调整shmmax和shmall

3.增加shmmax的大小:

运行以下命令:

 $ sysctl -w kernel.shmmax=134217728 $ sysctl -w kernel.shmall=2097152 

并写在/etc/sysctl.conf文件的顶部:

 kernel.shmmax=134217728 kernel.shmall=2097152 

参考: Ubuntu中的SHMMAX

4.重新启动postgresql

 $ service postgresql restart 

链接:

http://www.varlena.com/GeneralBits/Tidbits/perf.html

http://www.postgresql.org/docs/9.1/static/runtime-config-resource.html