We are runing EntireX xmlruntime : EntireX XMLServlet, Version: 7.3.4.02, Date: 16 Jun 2008. We use it to expose NATURAL subprograms as webservices.
When the xmlruntime server is under heavy load we get the following error…
“Broker Error 0013 0333: All sockets in socket pool for…etc”
We understand that the problem occurs in xmlruntime and is caused by all available sockets being in use. Doccumentation suggests that this behavior is controlled by poolsize and pooltimeout. It appears that the error occurs as soon as all sockets are in use, with minimal or no wait time before timing out.
Two questions:
1)What are the default poolsize and pooltimeout in xmlruntime?
2)Is it possible to override those values? If not, is there any other way to address this problem?
Thank you.
The defaults are the same for all Java based EntireX components:
- poolsize = 32
- pooltimeout = 300 seconds
You can change the defaults using an URL-style brokerID, e.g.
localhost:2345?poolsize=100
Thanks Rolf.
The behaviour of the xmlruntime servlet indicates that connections are being dropped, and calls begin failing, as soon as the 32 sockets are used - there is certainly not a wait time of 600 seconds for available sockets.
Please note that we are using the xmlRuntime servlet as packaged and distributed by software ag, using .xmm mappings - we therefore do not have any direct access to the underlying JAVA objects.
James.
James - you just need to supply the Broker ID in the format Rolf describes.
You don’t have to access the underlying Java objects at all - the xmlRuntime servlet is the Java object that will support the format described in the referenced documentation.
James, the pooltimeout parameter is used for a different purpose: Automatic closing of socket connections is controlled by the parameter pooltimeout. If a socket connection has not been used for the specified the number of seconds, it will be closed automatically. The default for this parameter is 300 seconds.
The default wait time for a free socket in version 7.3 is actually 0 seconds. This default value has been corrected to 10 seconds in a later version (EntireX 8.1).
The default can be changed by setting the Java system property entirex.timeout, if you specify a number it will be interpreted as seconds. You need to specify the property in the start-up script of your web server / servlet container, e.g.: java … -Dentirex.timeout=20 …
Rolf & Douglas,
Thank you for the advice. I don’t know how or where to specify the -Dentirex.timeout parameter in the Websphere environment where we run the servlet. My server skills are minimal, beyond deploying a .war file, and I’ve never had any involvement with startup scripts. Does anybody have any information specific to the WebSphere environment?
James.
Hi,
We are running EntireX xmlruntime Version: 8.1.1.3. And we getting the same error Broker Error 0013 0333: All sockets in socket pool for ETB1004:18032 are in use (size: 32 sockets) when the server gets more load.
Could any body say
The practice passing the Brokerid like “Brokerid?poolsize=62&pooltimeout=60” will be helpful? If we pass the values in every request then I think it may cause memory issue?
Are we can set the Poolsize and pooltimeout value in environment level?
Our WAS server is posting the request and it was having 50 thread in it thread pool. When it was 50 we haven’t received this socket error message we used to get PartnerTimeOut error and conversationTimeOut error. When we increased the thread count to 100 we got this socket error.
So, Is there any socket queue is availanle in entireX?
Thanks
Kesa
Hi Kesa,
you can safely use “Brokerid?poolsize=62&pooltimeout=60”. However, make sure that you are using the very same Brokerid in all situations, otherwise a socket pool will be created for each different Brokerid.
Is there a particular reason that you want sockets to be closed after 60 seconds inactivity? Short values for pooltimeout have the consequence that sockets get created and destroyed more frequently.
Thanks for the information Rolf.
The error seems to occur when multiple tabs to the same site are open and one tab is awaiting the completion of a task. The other tab is not allowed to do what it needs until the previous tab completes its task. The error “[url]http://www.fixotip.com/how-to-fix-error-waiting-for-available-sockets-in-google-chrome/[/url]” can result. Try another browser, or even the same one with a single tab to see if it occurs. This may rule out the server. If it does, then you will know the issue is one the browser side.
I don’t think that a browser implementation is using EntireX …