我在PostgreSQL 9.1中使用了一个数据库,其中的条目不断来自另一个程序。我在6秒后从Ajax发送请求以获取最新的entry.tomcat输出窗口显示异常---
Arval SQLException: FATAL: sorry, too many clients already
并且程序在此之后也正常工作。 当我用查询---
检查我的postgresselect 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中的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");
}
}
每次在控制台“con关闭”时打印;
答案 0 :(得分:19)
要增加连接限制,您可能会喜欢以下文档。
此解决方案在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 size should be less than shmmax size.
<强> 2。检查shmmax的命令:
$ sysctl -e kernel.shmmax
$ ipcs -l
参考:Adjusting shmmax and shmall
第3。增加shmmax的大小:
运行以下命令:
$ sysctl -w kernel.shmmax=134217728
$ sysctl -w kernel.shmall=2097152
并在/etc/sysctl.conf
文件中写到:
kernel.shmmax=134217728
kernel.shmall=2097152
<强> 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
答案 1 :(得分:11)
你可以在postgres中increase the max_connections,但这不是解决方案。你有资源泄漏。它可以是任何 - 连接未关闭,结果集未关闭。请返回并查看代码。
考虑使用像c3p0/BoneCp
这样的连接池库关于connection pooling is here的一般性讨论 (感谢@ sinisa229 mihajlovski)