Thread: An I/O error occured while sending to the backend
Hi,
I have developed an application using the jdbc driver and
connecting to a postgresql database .
The application mainly does the following two things:
① read data from the CSV file and insert it into the database
② perform a database query
In my application, the above ① and ② are executed asynchronously.
Everything was working fine until I increase the amount of CSV data to more than 1000.
Randomly they receive an error, the stack trace of which is below.
com.nec.neosarf.exception.NeoSarfException: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend
at com.nec.neosarf.services.core.controller.DutiesDao.DutiesDaoError(DutiesDao.java:2037)
at com.nec.neosarf.services.core.controller.DutiesDao.SelectData(DutiesDao.java:459)
at com.nec.neosarf.services.core.controller.DutiesDao.SelectData(DutiesDao.java:335)
at com.nec.neosarf.services.core.controller.CoreConductor.ConductorLv3_DataAccess(CoreConductor.java:2062)
at com.nec.neosarf.services.core.controller.CoreConductor.ConductorCore(CoreConductor.java:794)
at com.nec.neosarf.services.core.controller.CoreConductor.ConductorRun(CoreConductor.java:623)
at com.nec.neosarf.services.core.controller.CoreConductor.Conductor(CoreConductor.java:356)
at com.nec.neosarf.services.core.controller.CoreBody.ConductorCreation(CoreBody.java:4817)
at com.nec.neosarf.services.core.controller.CoreBody.ActionDirectorInteface(CoreBody.java:2783)
at com.nec.neosarf.services.core.controller.CoreBody.AjaxCheck(CoreBody.java:2465)
at com.nec.neosarf.services.core.controller.CoreBody.ExecutionPageRun(CoreBody.java:1693)
at com.nec.neosarf.services.core.servlet.NeoSarf.coreServlet(NeoSarf.java:386)
at com.nec.neosarf.services.core.servlet.NeoSarf.service(NeoSarf.java:139)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313)
at com.nec.neosarf.services.core.filter.dynamic.NeoSarfFilterChain.doFilter(NeoSarfFilterChain.java:36)
at com.nec.neosarf.services.debugger.filter.DebugSynchronizedFilter.doFilter(DebugSynchronizedFilter.java:72)
at com.nec.neosarf.services.core.filter.dynamic.NeoSarfFilterChain.doFilter(NeoSarfFilterChain.java:34)
at com.nec.neosarf.services.core.filter.dynamic.DynamicRequestFilter.executeServlet(DynamicRequestFilter.java:93)
at com.nec.neosarf.services.core.filter.RequestFilter.doFilter(RequestFilter.java:450)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:382)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:167)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:119)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:121)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:121)
at com.nec.neosarf.db.DaoBase.selectReal(DaoBase.java:393)
at com.nec.neosarf.db.DaoBase.selectDuties(DaoBase.java:328)
at com.nec.neosarf.services.core.controller.DutiesDao.SelectData(DutiesDao.java:372)
... 42 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.base/java.net.SocketInputStream.socketRead0(Native Method)
at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1454)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1065)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:161)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:128)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:113)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.receiveChar(PGStream.java:453)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2119)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355)
... 51 more
Thanks for any help.
On Wed, 2022-11-16 at 13:04 +0800, gzh wrote: > I have developed an application using the jdbc driver and > connecting to a postgresql database . > The application mainly does the following two things: > ① read data from the CSV file and insert it into the database > ② perform a database query > In my application, the above ① and ② are executed asynchronously. > Everything was working fine until I increase the amount of CSV data to more than 1000. > Randomly they receive an error, the stack trace of which is below. > > Caused by: java.net.SocketTimeoutException: Read timed out > at java.base/java.net.SocketInputStream.socketRead0(Native Method) > at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) > at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) > at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) > at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) > at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) > at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) > at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1454) > at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1065) > at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:161) Well, set a longer socket timeout if you need to run long SQL statements, or tune those statements to be faster. https://jdbc.postgresql.org/documentation/use/#connection-parameters has more information about "socketTimeout". Yours, Laurenz Albe
At 2022-11-16 14:57:41, "Laurenz Albe" <laurenz.albe@cybertec.at> wrote: >On Wed, 2022-11-16 at 13:04 +0800, gzh wrote: >> I have developed an application using the jdbc driver and >> connecting to a postgresql database . >> The application mainly does the following two things: >> ① read data from the CSV file and insert it into the database >> ② perform a database query >> In my application, the above ① and ② are executed asynchronously. >> Everything was working fine until I increase the amount of CSV data to more than 1000. >> Randomly they receive an error, the stack trace of which is below. >> >> Caused by: java.net.SocketTimeoutException: Read timed out >> at java.base/java.net.SocketInputStream.socketRead0(Native Method) >> at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) >> at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) >> at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) >> at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) >> at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) >> at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) >> at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1454) >> at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1065) >> at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:161) > >Well, set a longer socket timeout if you need to run long SQL statements, or tune >those statements to be faster. > >https://jdbc.postgresql.org/documentation/use/#connection-parameters has more >information about "socketTimeout". > >Yours, >Laurenz Albe
Is this true for large numbers of lines in you csv? Originally you said something like 'adding 1000 lines' broke your app. Are you using CopyManager?Thank you very much for your advice.What I don't understand is that there is no problem when executing ① alone or ② alone,the error occurs when ① and ② are executed together .It works well when i let the application sleep after ① for 10 seconds before executing ② .
At 2022-11-16 14:57:41, "Laurenz Albe" <laurenz.albe@cybertec.at> wrote: >On Wed, 2022-11-16 at 13:04 +0800, gzh wrote: >> I have developed an application using the jdbc driver and >> connecting to a postgresql database . >> The application mainly does the following two things: >> ① read data from the CSV file and insert it into the database >> ② perform a database query >> In my application, the above ① and ② are executed asynchronously. >> Everything was working fine until I increase the amount of CSV data to more than 1000. >> Randomly they receive an error, the stack trace of which is below. >> >> Caused by: java.net.SocketTimeoutException: Read timed out >> at java.base/java.net.SocketInputStream.socketRead0(Native Method) >> at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) >> at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) >> at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) >> at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) >> at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) >> at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) >> at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1454) >> at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1065) >> at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:161) > >Well, set a longer socket timeout if you need to run long SQL statements, or tune >those statements to be faster. > >https://jdbc.postgresql.org/documentation/use/#connection-parameters has more >information about "socketTimeout". > >Yours, >Laurenz Albe