Java org.postgresql.util.PSQLException:致命:剩余的连接插槽保留给非复制超级用户连接
我定期在Spring 4.1、Tomcat 8.5.30和Postgresql 9.6上开发一个应用程序,在尝试访问数据库或连续两次运行maven install时会收到此错误消息:Java org.postgresql.util.PSQLException:致命:剩余的连接插槽保留给非复制超级用户连接,java,connection-pooling,postgresql-9.6,tomcat8.5,Java,Connection Pooling,Postgresql 9.6,Tomcat8.5,我定期在Spring 4.1、Tomcat 8.5.30和Postgresql 9.6上开发一个应用程序,在尝试访问数据库或连续两次运行maven install时会收到此错误消息: AVERTISSEMENT [http-nio-9000-exec-36] org.apache.naming.NamingContext.lookup Une erreur s est produite durant la résolution de la référence org.postgresql.u
AVERTISSEMENT [http-nio-9000-exec-36]
org.apache.naming.NamingContext.lookup Une erreur s est produite durant
la résolution de la référence
org.postgresql.util.PSQLException: FATAL: remaining connection slots are
reserved for non-replication superuser connections
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:691)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:156)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:35)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:47)
at org.postgresql.jdbc42.AbstractJdbc42Connection.<init>(AbstractJdbc42Connection.java:21)
at org.postgresql.jdbc42.Jdbc42Connection.<init>(Jdbc42Connection.java:28)
at org.postgresql.Driver.makeConnection(Driver.java:415)
at org.postgresql.Driver.connect(Driver.java:282)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:736)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:668)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:560)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:244)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:839)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
AVERTISSEMENT[http-nio-9000-exec-36]
org.apache.naming.NamingContext.lookup Une erreur s est produite durant
法国解决方案
org.postgresql.util.PSQLException:致命:剩余的连接插槽为
为非复制超级用户连接保留
位于org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:691)
位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
位于org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
位于org.postgresql.jdbc2.AbstractJdbc2Connection。(AbstractJdbc2Connection.java:156)
位于org.postgresql.jdbc3.AbstractJdbc3Connection。(AbstractJdbc3Connection.java:35)
位于org.postgresql.jdbc3g.AbstractJdbc3gConnection。(AbstractJdbc3gConnection.java:22)
位于org.postgresql.jdbc4.AbstractJdbc4Connection。(AbstractJdbc4Connection.java:47)
位于org.postgresql.jdbc42.AbstractJdbc42Connection。(AbstractJdbc42Connection.java:21)
位于org.postgresql.jdbc42.Jdbc42Connection。(Jdbc42Connection.java:28)
位于org.postgresql.Driver.makeConnection(Driver.java:415)
位于org.postgresql.Driver.connect(Driver.java:282)
位于org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
位于org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
位于org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:736)
位于org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:668)
位于org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483)
位于org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:154)
位于org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
位于org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
位于org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:560)
位于org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:244)
位于javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:839)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:159)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:827)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:159)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:827)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:159)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:827)
位于org.apache.naming.NamingContext.lookup(NamingContext.java:173)
位于org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
在javax.naming.InitialContext.lookup(InitialContext.java:417)
位于org.springframework.jndi.jndemplate$1.doInContext(jndemplate.java:155)
位于org.springframework.jndi.jndemplate.execute(jndemplate.java:87)
位于org.springframework.jndi.jndemplate.lookup(jndemplate.java:152)
位于org.springframework.jndi.jndemplate.lookup(jndemplate.java:179)
位于org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
实际上,我试图实现Tomcat org.apache.Tomcat.jdbc.pool.DataSourceFactory的连接池,但仍然存在问题
Context.xml的一部分:
<Resource name="jdbc/newmf01DataSource"
auth="Container"
type="javax.sql.DataSource"
username="xx"
password="xx"
driverClassName="org.postgresql.Driver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer(trace=true);
org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=1000,maxQueries=10000);
org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx(notifyPool=false,objectName=tomcat.jdbc:type=org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx,name=jdbc/newmf01DataSource)"
url="jdbc:postgresql://dvdsi975.rouen.francetelecom.fr:5432/pnmf02"
validationQuery="SELECT 1"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
maxIdle="20"
maxActive="70"
minIdle="10"
initialSize="10"
logAbandoned="true"
removeAbandonedTimeout="60"
removeAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
useNaming="false"
maxWait ="10000"
/>
以前有人看到过这一点,或者请帮我指出正确的方向?我通过以下方式检查了有多少打开的连接:从pg\u stat\u活动中选择*;我发现很多Idl连接,每次我运行安装时,这个数字都会增加,并超过postgresql的“max connection=100”。
因此,我通过修改minIdle=“10”->“0”解决了这个问题。谢谢,我修改了context.xml,但仍然存在问题
minIdle>maxIdle
看起来很奇怪。配置中似乎不存在。是的,我更正了我的context.xml可能的副本(您的postgresql数据库拒绝新连接。请检查有多少打开的连接,这是否正常,并增加数据库设置中的最大连接数,或找到减少连接数的方法)