Hi,
We have a OD application which has a DBOP to insert some data to a MS-SQL DB. At times what happens is that the operation takes a tad too long to complete , more than 11 secs(which is the IVRS fetch timeout), and an error.badfetch exception is thrown. This is being handled in the code. But for some reason the DBOP thread still seems to be running in the tomcat after the application has exited. In this case we receive exceptions in the catalina.out file as follows:
----------------------------------------------------------------------------------------------------
Fatal Error : caught exception [java.lang.NullPointerException] while trying to report applicaiton exception [javax.servlet.ServletException: EXCEPTION>
java.lang.NullPointerException
]
java.lang.NullPointerException
*** Abandoning thread sessionid [D049D57134E10835BB2A6CF6F152486E:/SelfServiceApp_v2], request invalid, ignore trace above
*** Abandoning thread sessionid [D049D57134E10835BB2A6CF6F152486E:/SelfServiceApp_v2], request invalid, ignore trace above
------------------------------------------------------------------------------------------------------
After sometime the tomcat shuts down with a JVM memory crash dump "Java.lang.OutOfMemoryError: requested 1076688 bytes for Chunk::new. Out of swap space?". What could be causing this?
We have already tuned the Tomcat JVM memory according to the call volume and are investigating as to why the DBOP is taking so long from the DB end.
In the meanwhile is there a way to implement a query timeout for the DBOP operations to ensure that no stray threads are left running?
I did see an earlier thread relating to DD/ Oracle DB that mentions overriding the DBOP java method and handling the result. Is there some other way to do it in OD?
|