zcwslnh / javamelody

Automatically exported from code.google.com/p/javamelody
0 stars 0 forks source link

StackOverflow with JDBC datasource, JBoss AS #39

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Occasionally, we're getting StackOverflows when accessing an Oracle database 
via a JavaMelody monitored datasource (via jndi, JBoss AS):

java.lang.StackOverflowError
    at oracle.net.ns.NetOutputStream.write(Unknown Source)
    at oracle.net.ns.NetOutputStream.write(Unknown Source)
    at oracle.net.ns.NetOutputStream.write(Unknown Source)
    at oracle.jdbc.driver.T4CMAREngine.value2Buffer(T4CMAREngine.java:905)
    at oracle.jdbc.driver.T4CMAREngine.marshalSB4(T4CMAREngine.java:405)
    at oracle.jdbc.driver.T4CMAREngine.marshalUB4(T4CMAREngine.java:426)
    at oracle.jdbc.driver.T4C8Oall.marshalPisdef(T4C8Oall.java:1000)
    at oracle.jdbc.driver.T4C8Oall.marshalAll(T4C8Oall.java:937)
    at oracle.jdbc.driver.T4C8Oall.marshal(T4C8Oall.java:422)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)
    at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
    at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
    at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
    at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy328.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)

Original issue reported on code.google.com by tim.romb...@gmail.com on 23 Aug 2010 at 3:02

GoogleCodeExporter commented 9 years ago
Another stack:

java.lang.StackOverflowError
    at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:542)
    at oracle.jdbc.driver.T4CTTIdcb.fillupAccessors(T4CTTIdcb.java:283)
    at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:215)
    at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:114)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:703)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
    at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
    at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
    at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
    at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy328.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:344)
    at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:170)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:251)
    at oracle.jdbc.driver.$Proxy384.execute(Unknown Source)

Original comment by tim.romb...@gmail.com on 23 Aug 2010 at 3:06

GoogleCodeExporter commented 9 years ago
Strange, because it is a StackOverflowError without an infinite recursivity 
(there is a moment when the OracleStatement seems correctly called).

First, when a sql request is executed, is it counted once or is it counted more 
than once? (you can open the details with the link below the list of the sql 
requests, and you can look at the column "Hits" : do some sql requests always 
have a number which is a multiple of 2 or 5 or something else?).

Note that you can choose the period "All" at the top of the report and then 
click the "reset" below the sql statistics (for this "All" period only and when 
you want) in order to see only the sql requests which you will execute after 
this reset.

And second, is there something unusual in your deployment? an ear file or 
multiple war files?
If yes, where have you put the javamelody.jar file?

And can you say versions of JavaMelody, JBoss, JDK?

Thanks

Original comment by evernat@free.fr on 23 Aug 2010 at 5:46

GoogleCodeExporter commented 9 years ago
Your remark made me wondering about our deployment; we do indeed have 2 war 
files, but they're both using the same datasource, and both using JavaMelody to 
monitor it.

Removing JavaMelody from 1 or the wars resolved the problem; the 
StackOverflowError hasn't appeared anymore since.

Thx a lot for the hint!

Original comment by tim.romb...@gmail.com on 30 Aug 2010 at 8:48

GoogleCodeExporter commented 9 years ago
So it seems not recommended to have 2 webapps in JBoss, using both a single 
jndi datasource which is monitored with JavaMelody from the 2 webapps.
Another solution to this case could be to have 2 different datasources (with 
different names and certainly the same configuration): one datasource for each 
webapp, instead of a single datasource.
Note that in tomcat, the architecture with resources/resourcelinks by context 
does not seem to have this problem.

Anyway, great to see you have resolved your problem.
I close the issue as WontFix for now, if you are ok with this.
If anyone has a code change to suggest, please reopen this issue.

Original comment by evernat@free.fr on 1 Sep 2010 at 5:32