Thursday, July 7, 2011

An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

The configuration

OS-Windows Server 2003 R2 x86, SP2
Oracle 10gR2 Ent x86 (10.2.0.5.0)
Apex 4.01
Oracle BI configuration:
Oracle Business Intelligence Product Version 10.1.3.4.1 (Build 090414.1900) 
Physical Presentation Catalog Path \\?\C:\OracleBIData\web\catalog\samplesales\root 
Oracle BI Server Data Source AnalyticsWeb 
Available Paging Memory (MB) 1795 
Available Virtual Address Space (MB) 2939 

The problem

When I run XML Publsher report (from Apex, using predefined RTF template) I got a PDF file with the following content:
500 Internal Server Error
Servlet error: An exception occurred. The current application deployment descriptors do not allow for including it in this response. Please consult the application log for details.
Quick look in XML publisher's log file (C:\OracleBI\oc4j_bi\j2ee\home\application-deployments\xmlpserver\application.log) showed me an error:
11/07/06 15:16:28.171 xmlpserver: Servlet error
java.lang.IllegalStateException: IOException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.EvermindHttpServletRequest.getParameter(EvermindHttpServletRequest.java:2295)
 at oracle.apps.xdo.servlet.Converter.doPost(Converter.java:64)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:711)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:368)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:866)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:448)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:216)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
 at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:239)
 at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:34)
 at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:880)
 at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:298)
 at java.lang.Thread.run(Thread.java:595)
As you see from highlited row was the core of the problem.

The solution

Solution was found on MS knowledge base page. There stand the very same error with solution described as:
The default maximum number of ephemeral TCP ports is 5000 in the products that are included in the "Applies to" section. A new parameter has been added in these products. To increase the maximum number of ephemeral ports, follow these steps:
Locate the following subkey in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Edit menu, click New, and then add the following registry entry:
Value Name: MaxUserPort
Value Type: DWORD
Value data: 65534
Valid Range: 5000-65534 (decimal)
Default: 0x1388 (5000 decimal)
in our case there was no registry entry (5000 is default) so we set 60000 as a new value.
After we restarted server, XML Publisher report run with no errors.

The End

Java configuration problems has a world wide Google references. Here is AYA Java problem, which arise in Oracle BI on Windows. This one was successfully solved.

So I wrote this post more as a quick guide to someone else in the future.

Cheers!

P.S.
After few days I got mail from other MS consultant, who inform me that in MS Exchange installations steps one of them is setup MaxUserPort value to 60000, as described.
:-)

2 comments:

  1. Just to inform, that on heavy duty systems, mentioned workaround didn't succeeded on Windows platform.
    So when we move OBI installation to Linux 5.x, all was fine and with no error and without need for restarting every now and then.

    ReplyDelete