Wednesday, August 30, 2006

ORACLE: Io exception: Got minus one from a read call

Using Oracle Shared Server Processes: http://www.mid.main.vsu.ru/docs/oracle/network.816/a76933/mtsa.gif


Incoming requests hit the TNS listener, and are held in a queue to obtain a shared server process. A broken pipe occurred during the handoff to a shared server process. We still do not know which pipe broke, nor why the Oracle and other web forums report this as a possibility on HP and Linux hosts, whereas on Solaris and Windows, we observed a more appropriate Oracle ORA-12519 �TNS:no appropriate service handler found� instead.

Alternative is to use dedicated server processes:
http://www.mid.main.vsu.ru/docs/oracle/network.816/a76933/net81036.gif

Although there were 300 shared server processes configured, the error always occurred on the 283rd. If one used dedicated server processes, you could configure your deployments exactly match the number of server processes to the number of database pool connections, rather than attempting to guess what the algorithm is when breakdown occurs. 300 Oracle server processes just was not enough for the load experienced.

Error seen in Oracle log (DB Server side):
03-AUG-2006 21:29:36 * (CONNECT_DATA=(SID=sid)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.2.2)(PORT=48460)) * establish * sid * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe

Stack trace seen on server (DB Connection client side):
2006 Aug 03 21:28:57 [ACTIVE] ExecuteThread: '63' for queue: 'weblogic.kernel.Default (self-tuning)' ERROR: 1656935/:: DB Connection unavailable.
java.sql.SQLException: Pool connect failed : weblogic.common.ResourceException: 8:weblogic.common.ResourceException: Could not create pool connection. The DBMS driver exception was: Io exception: Got minus one from a read call
at weblogic.jdbc.common.internal.JDBCUtil.wrapAndThrowResourceException(JDBCUtil.java:241)
at weblogic.jdbc.pool.Driver.connect(Driver.java:161)
at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:647)
at weblogic.jdbc.jts.Driver.connect(Driver.java:137)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
at dbpool.DBConnectionCache.getConnection(DBConnectionCache.java:101)

Stack trace as seen by Weblogic (DB Connection client side):
java.sql.SQLException: Io exception: Got minus one from a read call
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:274)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:328)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:348)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:151)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:563)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.makeConnection(ConnectionEnvFactory.java:301)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.createResource(ConnectionEnvFactory.java:205)
at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1049)
at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:977)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:372)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:295)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:285)
at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:455)
at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:346)
at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:83)
at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:96)
at weblogic.jdbc.pool.Driver.connect(Driver.java:150)
at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:647)
at weblogic.jdbc.jts.Driver.connect(Driver.java:137)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
at dbpool.DBConnectionCache.getConnection(DBConnectionCache.java:101)

No comments: