これは、システムに負荷がかかっている場合にのみ発生します。少なくともそれは顕著です。
Postgres 8.3.14 JDK 1.6 Tomcat 6 マシンには 7GB のメモリがあります
postgres データ ディレクトリが hd 全体を使い果たしていることに気付きました。100GB ドライブに postgres があり、数時間以内にいっぱいになります。
1,000 万行、多くの結合があり、ほとんどが読み取りです。
使用量が一晩で 10 倍になったので、これに気付きました。
shared_buffers = 2GB effective_cache_size = 3GB ほとんど変更しない場合、他のすべて
21:56:59,736 DEBUG BasicResourcePool:1620 - トレース com.mchange.v2.resourcepool.BasicResourcePool@176b9ea [管理: 24、未使用: 1、除外: 0] (例: com.mchange.v2.c3p0.impl.NewPooledConnection@1c3dc66 ) 21:56:59,736 DEBUG BasicResourcePool:1620 - トレース com.mchange.v2.resourcepool.BasicResourcePool@176b9ea [管理: 24、未使用: 1、除外: 0] (例: com.mchange.v2.c3p0.impl.NewPooledConnection@ 1c3dc66) 21:56:59,736 DEBUG BasicResourcePool:1450 - 期限切れのリソースのチェックが完了しました。[com.mchange.v2.resourcepool.BasicResourcePool@176b9ea] 21:56:59,736 DEBUG BasicResourcePool:956 - リソースを破棄する準備をしています: com.mchange.v2.c3p0.impl.NewPooledConnection@1e0a562 21:56:59,736 DEBUG C3P0PooledConnectionPool:468 - PooledConnection を破棄する準備をしています: com.mchange.v2.c3p0.impl.NewPooledConnection@1e0a562 21:56:59, 736 DEBUG NewPooledConnection:564 - com.mchange.v2.c3p0.impl.NewPooledConnection@1e0a562 がクライアントによって閉じられました。java.lang.Exception: DEBUG -- com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:564) のクライアント スタック トレースによるクローズ com.mchange.v2.c3p0.impl.NewPooledConnection.close( NewPooledConnection.java:234) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:958) com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run (ThreadPoolAsynchronousRunner.java:547) で 21:56:59,736 デバッグ C3P0PooledConnectionPool:476 - PooledConnection が正常に破棄されました: com.mchange.v2.c3p0.impl。NewPooledConnection@1e0a562 21:56:59,736 DEBUG BasicResourcePool:961 - 正常に破棄されたリソース: com.mchange.v2.c3p0.impl.NewPooledConnection@1e0a562 21:56:59,737 DEBUG NewPooledConnection:430 - com.mchange.v2.c3p0.impl. NewPooledConnection@1e0a562 スロー可能オブジェクトを処理しています。org.postgresql.util.PSQLException:バックエンドへの送信中に I/O エラーが発生しました。org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) で org.postgresql.jdbc2.AbstractJdbc2Statement.execute でprocessResults(QueryExecutorImpl.java:1620) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) ... 58 さらに 21:56:59,737 DEBUG SqlUtils:85 - SQLException を SQLException に変換しようとしました。放っておく。[SQLState: 08006; errorCode: 0] org.postgresql.util.PSQLException:バックエンドへの送信中に I/O エラーが発生しました。org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) で org.postgresql.jdbc2.AbstractJdbc2Statement.execute で(AbstractJdbc2Statement.java:479) org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) で org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271) で com.mchange.v2.c3p0。 impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) org.hibernate.loader.Loader.getResultSet(Loader.java:1953) org.hibernate org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) の .loader.Loader.doQuery(Loader.java:802) org.hibernate.loader.Loader.loadEntity(Loader.java:2037) の org. org.hibernate.loader.entity の hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)。AbstractEntityLoader.load(AbstractEntityLoader.java:76) の org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268) の org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496) の org .hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477) org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) org.hibernate.event.def.DefaultLoadEventListener.lockAndLoad(DefaultLoadEventListener) .java:403) org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090) で org.hibernate.impl.SessionImpl. org.hibernate.impl.SessionImpl の load(SessionImpl.java:1061)。com.icon.sa.service.action.auser.ItemUpdateAction.pre(ItemUpdateAction. java:28) com.icon.sa.service.action.BaseAction.perform(BaseAction.java:59) で com.icon.sa.ws.auser.ItemResource.update(ItemResource.java:43) で sun.reflect .GeneratedMethodAccessor299.invoke(不明なソース)、sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)、java.lang.reflect.Method.invoke(Method.java:616)、com.sun.jersey.server.impl .model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:168) com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279) でのディスパッチ (ResourceJavaMethodDispatcher.java:70) com.sun.jersey.server.impl.uri.rules.SubLocatorRule で。 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で、com.sun.jersey.server.impl.uri.rules.SubLocatorRule で (SubLocatorRule.java:121) を受け入れます。 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で (SubLocatorRule.java:121) を受け入れ、com.sun.jersey.server.impl.uri.rules.ResourceClassRule で受け入れます。 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で (ResourceClassRule.java:86)、com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule で受け入れます。 com.sun.jersey で (RootResourceClassesRule.java:74) を受け入れます。server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1357) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1289) com.sun.jersey.server.impl. application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229) at com.sun.jersey.spi.container.servlet.WebComponent. service(WebComponent.java:420) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer. java:684) の javax.servlet.http.HttpServlet.service(HttpServlet.java:717) の org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache .catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java) :102) org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:647) で org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) で org.apache.catalina.connector. CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) で org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) で java.lang .Thread.run(Thread.java:636) 原因: java.net.SocketException: java.net.SocketInputStream.socketRead0(ネイティブ メソッド) でソケットが閉じられました java.net.SocketInputStream.read(SocketInputStream.java:146) でorg.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135) org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104) at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73) org.postgresql.core.PGStream.ReceiveChar(PGStream.java:259) で org.postgresql.core.v3.QueryExecutorImpl で。processResults(QueryExecutorImpl.java:1620) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) ... 58 さらに 21:56:59,738 DEBUG DefaultConnectionTester:126 - 例外に応答して接続をテストする: org.postgresql.util.PSQLException:バックエンドへの送信中に I/O エラーが発生しました。org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) で org.postgresql.jdbc2.AbstractJdbc2Statement.execute でprocessResults(QueryExecutorImpl.java:1620) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) ... 58 さらに 21:56:59,738 DEBUG DefaultConnectionTester:194 - 接続 org.postgresql.jdbc4.Jdbc4Connection @3aca がデフォルトのシステムテーブル接続テストに失敗し、例外が発生しました! org.postgresql.util.PSQLException:バックエンドへの送信中に I/O エラーが発生しました。org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) で org.postgresql.jdbc2.AbstractJdbc2Statement.execute で(AbstractJdbc2Statement.java:479) org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353) org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252) org.postgresql.jdbc2.AbstractMeta2Data com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnectionNoQuery(DefaultConnectionTester.java:185) の getTables(AbstractJdbc2DatabaseMetaData.java:2062) com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnection(DefaultConnectionTester.java:62) のcom.mchange.v2.c3p0.impl.DefaultConnectionTester.statusOnException(DefaultConnectionTester.java:143) で com.mchange.v2.c3p0.AbstractConnectionTester.statusOnException(AbstractConnectionTester.java:82) で com.mchange.v2.c3p0.impl .NewPooledConnection。handleThrowable(NewPooledConnection.java:437) com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:93) org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) org.hibernate .loader.Loader.getResultSet(Loader.java:1953) org.hibernate.loader.Loader.doQuery(Loader.java:802) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) org. hibernate.loader.Loader.loadEntity(Loader.java:2037) at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86) at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java: 76) org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268) で org.hibernate.event.def.org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477) で DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496) org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) で org .hibernate.event.def.DefaultLoadEventListener.lockAndLoad(DefaultLoadEventListener.java:403) org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:155) org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java) :1090) org.hibernate.impl.SessionImpl.load(SessionImpl.java:1061) で org.hibernate.impl.SessionImpl.load(SessionImpl.java:1050) で com.icon.sa.common.dm.dao. BaseDao.findByIdLockedOrException(BaseDao.java:52) com.icon.sa.service.action.auser.ItemUpdateAction.pre(ItemUpdateAction.java:28) com.icon.sa.service.action.BaseAction.perform(BaseAction.java:59) で com.icon.sa.ws.auser.ItemResource.update(ItemResource.java:43) で sun.reflect .GeneratedMethodAccessor299.invoke(不明なソース)、sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)、java.lang.reflect.Method.invoke(Method.java:616)、com.sun.jersey.server.impl .model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:168) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70) at com.sun com.sun.jersey.server.impl.uri.rules.SubLocatorRule の .jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)。com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で、com.sun.jersey.server.impl.uri.rules.SubLocatorRule で (SubLocatorRule.java:121) を受け入れます。 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で (SubLocatorRule.java:121) を受け入れ、com.sun.jersey.server.impl.uri.rules.ResourceClassRule で受け入れます。 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136) で (ResourceClassRule.java:86)、com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule で受け入れます。 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1357) で (RootResourceClassesRule.java:74) を受け入れ、com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.ジャバ:1289) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229) com .sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497) at com.sun.jersey .spi.container.servlet.ServletContainer.service(ServletContainer.java:684) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java) :290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) で org.apache.catalina.core.StandardWrapperValve で。org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) の invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) の org.apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:647) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java) :109) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) で org.apache.coyote.http11 で org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) で java.lang.Thread.run(Thread.java:636) 原因: java.io.IOException: ストリームが sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:44) で sun.nio.cs.StreamEncoder.flush で閉じられました(StreamEncoder.java:139) で java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) で org.postgresql.core.PGStream.flush(PGStream.java:507) で org.postgresql.core.v3.QueryExecutorImpl. sendSync(QueryExecutorImpl.java:1107) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:256) ... 64 もっと見るflush(PGStream.java:507) at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:1107) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:256) ... 64もっとflush(PGStream.java:507) at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:1107) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:256) ... 64もっと
ここに私の設定があります
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="c3p0.max_size">250</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">10</property>
<property name="c3p0.timeout">100</property> <!-- seconds -->
<!-- Configuring Connection Testing -->
<!-- Create a test table to query for on checkout and checkin. A test table
is faster than to use the getTables default cmd. -->
<property name="automaticTestTable">c3p0_test</property>
<property name="checkoutTimeout">0</property>
<!-- This tests to make sure the connection is still valid (needed for high load system). -->
<property name="testConnectionOnCheckout">true</property>
<property name="testConnectionOnCheckin">true</property>
<!-- Configuring Recovery From Database Outages -->
<property name="acquireRetryAttempts">0</property>
<property name="acquireRetryDelay">1000</property>
<property name="breakAfterAcquireFailure">false</property>
<!-- This is a safeguard to cleanup any open, abandoned connections.
These are connections that are opened but never closed. Debug on server if this ever needs
to cleanup.
We can test without this feature (its discouraged to use) -->
<property name="unreturnedConnectionTimeout">300</property>
<property name="debugUnreturnedConnectionStackTraces">true</property>