You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by Tiago Fernandes Thomaz <ti...@optimus.pt> on 2002/04/22 11:58:50 UTC

Heavy loads on SOAP RPC

Hi,

I'm facing some trouble concerning heavy loads on soap rpc.
I coded a soap client that simulates several clients with a Thread
implementation.
My snippet code is:

public class SOAPClient
{
  public static void main (String[] args) throws Exception
  {
    URL url = new URL(args[0]);
    String sXML = null;

    for (int i = 0; i < 50; i++)
    {
        sXML = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><request client
= \"client"+i+"\" action = \"action"+i+"\"><parameter name =
\"name"+i+"\">My Name"+i+"</parameter></request> ";

      Call call = new Call();
      call.setTargetObjectURI("urn:Connector");
      call.setMethodName("sendRequest");
      call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
      Vector params = new Vector();
      params.addElement(new org.apache.soap.rpc.Parameter("sXML",
String.class, sXML, null));

      call.setParams(params);

      (new TestThread(call, url)).start();
    }
  }
}


public class TestThread extends Thread
{
  Call testCall = null;
  URL  url = null;
 
  public TestThread(Call testCall, URL url)
  {
    this.testCall = testCall;
    this.url = url;
  }

  public void run()
  {
    try {
      org.apache.soap.rpc.Response resp = testCall.invoke(url, "");

      if (resp.generatedFault())
      {
        Fault fault = resp.getFault();
        System.out.println(this.getName() + "Fault Code   = " +
fault.getFaultCode());
        System.out.println(this.getName() + "Fault String = " +
fault.getFaultString());
      }
      else
      {
        org.apache.soap.rpc.Parameter result = resp.getReturnValue();
        String res = result.toString();
        Object obj = result.getValue();
        String resp2 = obj.toString();
        System.out.println(this.getName()+" - Result: "+resp2);
      }
    }
    catch (Exception e)
    {
      System.out.println(this.getName() + " :Error! - " + e.getMessage());
    }
  }
}

, and I'm getting the following exception for most of the Threads (30 out of
50):

Thread-i Error opening socket: Connection refused: connect

Does anyone explain me why am I getting this? Is it because SOAP can only
handle about 20 http connections?

Tiago Fernandes Thomaz

Re: Heavy loads on SOAP RPC

Posted by Scott Nichol <sn...@scottnichol.com>.
Also note that if you use a Microsoft OS, you will be limited to 10 queued
connections unless you run the Server, Advanced Server, etc., version of the OS.

Scott

----- Original Message -----
From: "Scott Nichol" <sn...@scottnichol.com>
To: <so...@xml.apache.org>
Sent: Monday, April 22, 2002 8:09 AM
Subject: Re: Heavy loads on SOAP RPC


> The Web server and/or servlet container against which you are testing probably
> has a limit set for the number of connections it will queue.  In Tomcat 3.2.1,
> for example, server.xml has the "backlog" parameter for a Connector:
>
>         <!-- Normal HTTP -->
>         <Connector className="org.apache.tomcat.service.PoolTcpConnector">
>             <Parameter name="handler"
>                 value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
>             <Parameter name="port"
>                 value="8080"/>
>             <Parameter name="backlog" value="100"/>
>         </Connector>
>
> In Tomcat 4.0.1, the Connector has an acceptCount attribute:
>
>     <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
>     <Connector className="org.apache.catalina.connector.http.HttpConnector"
>                port="8080" minProcessors="5" maxProcessors="75"
>                enableLookups="true" redirectPort="8443"
>                acceptCount="10" debug="0" connectionTimeout="60000"/>
>
> Scott Nichol
>
> ----- Original Message -----
> From: "Tiago Fernandes Thomaz" <ti...@optimus.pt>
> To: <so...@xml.apache.org>
> Sent: Monday, April 22, 2002 5:58 AM
> Subject: Heavy loads on SOAP RPC
>
>
> > Hi,
> >
> > I'm facing some trouble concerning heavy loads on soap rpc.
> > I coded a soap client that simulates several clients with a Thread
> > implementation.
> > My snippet code is:
> >
> > public class SOAPClient
> > {
> >   public static void main (String[] args) throws Exception
> >   {
> >     URL url = new URL(args[0]);
> >     String sXML = null;
> >
> >     for (int i = 0; i < 50; i++)
> >     {
> >         sXML = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><request client
> > = \"client"+i+"\" action = \"action"+i+"\"><parameter name =
> > \"name"+i+"\">My Name"+i+"</parameter></request> ";
> >
> >       Call call = new Call();
> >       call.setTargetObjectURI("urn:Connector");
> >       call.setMethodName("sendRequest");
> >       call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
> >       Vector params = new Vector();
> >       params.addElement(new org.apache.soap.rpc.Parameter("sXML",
> > String.class, sXML, null));
> >
> >       call.setParams(params);
> >
> >       (new TestThread(call, url)).start();
> >     }
> >   }
> > }
> >
> >
> > public class TestThread extends Thread
> > {
> >   Call testCall = null;
> >   URL  url = null;
> >
> >   public TestThread(Call testCall, URL url)
> >   {
> >     this.testCall = testCall;
> >     this.url = url;
> >   }
> >
> >   public void run()
> >   {
> >     try {
> >       org.apache.soap.rpc.Response resp = testCall.invoke(url, "");
> >
> >       if (resp.generatedFault())
> >       {
> >         Fault fault = resp.getFault();
> >         System.out.println(this.getName() + "Fault Code   = " +
> > fault.getFaultCode());
> >         System.out.println(this.getName() + "Fault String = " +
> > fault.getFaultString());
> >       }
> >       else
> >       {
> >         org.apache.soap.rpc.Parameter result = resp.getReturnValue();
> >         String res = result.toString();
> >         Object obj = result.getValue();
> >         String resp2 = obj.toString();
> >         System.out.println(this.getName()+" - Result: "+resp2);
> >       }
> >     }
> >     catch (Exception e)
> >     {
> >       System.out.println(this.getName() + " :Error! - " + e.getMessage());
> >     }
> >   }
> > }
> >
> > , and I'm getting the following exception for most of the Threads (30 out of
> > 50):
> >
> > Thread-i Error opening socket: Connection refused: connect
> >
> > Does anyone explain me why am I getting this? Is it because SOAP can only
> > handle about 20 http connections?
> >
> > Tiago Fernandes Thomaz
> >
>
>


Re: Heavy loads on SOAP RPC

Posted by Scott Nichol <sn...@scottnichol.com>.
Also note that if you use a Microsoft OS, you will be limited to 10 queued
connections unless you run the Server, Advanced Server, etc., version of the OS.

Scott

----- Original Message -----
From: "Scott Nichol" <sn...@scottnichol.com>
To: <so...@xml.apache.org>
Sent: Monday, April 22, 2002 8:09 AM
Subject: Re: Heavy loads on SOAP RPC


> The Web server and/or servlet container against which you are testing probably
> has a limit set for the number of connections it will queue.  In Tomcat 3.2.1,
> for example, server.xml has the "backlog" parameter for a Connector:
>
>         <!-- Normal HTTP -->
>         <Connector className="org.apache.tomcat.service.PoolTcpConnector">
>             <Parameter name="handler"
>                 value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
>             <Parameter name="port"
>                 value="8080"/>
>             <Parameter name="backlog" value="100"/>
>         </Connector>
>
> In Tomcat 4.0.1, the Connector has an acceptCount attribute:
>
>     <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
>     <Connector className="org.apache.catalina.connector.http.HttpConnector"
>                port="8080" minProcessors="5" maxProcessors="75"
>                enableLookups="true" redirectPort="8443"
>                acceptCount="10" debug="0" connectionTimeout="60000"/>
>
> Scott Nichol
>
> ----- Original Message -----
> From: "Tiago Fernandes Thomaz" <ti...@optimus.pt>
> To: <so...@xml.apache.org>
> Sent: Monday, April 22, 2002 5:58 AM
> Subject: Heavy loads on SOAP RPC
>
>
> > Hi,
> >
> > I'm facing some trouble concerning heavy loads on soap rpc.
> > I coded a soap client that simulates several clients with a Thread
> > implementation.
> > My snippet code is:
> >
> > public class SOAPClient
> > {
> >   public static void main (String[] args) throws Exception
> >   {
> >     URL url = new URL(args[0]);
> >     String sXML = null;
> >
> >     for (int i = 0; i < 50; i++)
> >     {
> >         sXML = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><request client
> > = \"client"+i+"\" action = \"action"+i+"\"><parameter name =
> > \"name"+i+"\">My Name"+i+"</parameter></request> ";
> >
> >       Call call = new Call();
> >       call.setTargetObjectURI("urn:Connector");
> >       call.setMethodName("sendRequest");
> >       call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
> >       Vector params = new Vector();
> >       params.addElement(new org.apache.soap.rpc.Parameter("sXML",
> > String.class, sXML, null));
> >
> >       call.setParams(params);
> >
> >       (new TestThread(call, url)).start();
> >     }
> >   }
> > }
> >
> >
> > public class TestThread extends Thread
> > {
> >   Call testCall = null;
> >   URL  url = null;
> >
> >   public TestThread(Call testCall, URL url)
> >   {
> >     this.testCall = testCall;
> >     this.url = url;
> >   }
> >
> >   public void run()
> >   {
> >     try {
> >       org.apache.soap.rpc.Response resp = testCall.invoke(url, "");
> >
> >       if (resp.generatedFault())
> >       {
> >         Fault fault = resp.getFault();
> >         System.out.println(this.getName() + "Fault Code   = " +
> > fault.getFaultCode());
> >         System.out.println(this.getName() + "Fault String = " +
> > fault.getFaultString());
> >       }
> >       else
> >       {
> >         org.apache.soap.rpc.Parameter result = resp.getReturnValue();
> >         String res = result.toString();
> >         Object obj = result.getValue();
> >         String resp2 = obj.toString();
> >         System.out.println(this.getName()+" - Result: "+resp2);
> >       }
> >     }
> >     catch (Exception e)
> >     {
> >       System.out.println(this.getName() + " :Error! - " + e.getMessage());
> >     }
> >   }
> > }
> >
> > , and I'm getting the following exception for most of the Threads (30 out of
> > 50):
> >
> > Thread-i Error opening socket: Connection refused: connect
> >
> > Does anyone explain me why am I getting this? Is it because SOAP can only
> > handle about 20 http connections?
> >
> > Tiago Fernandes Thomaz
> >
>
>


Re: Heavy loads on SOAP RPC

Posted by Scott Nichol <sn...@scottnichol.com>.
The Web server and/or servlet container against which you are testing probably
has a limit set for the number of connections it will queue.  In Tomcat 3.2.1,
for example, server.xml has the "backlog" parameter for a Connector:

        <!-- Normal HTTP -->
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="8080"/>
            <Parameter name="backlog" value="100"/>
        </Connector>

In Tomcat 4.0.1, the Connector has an acceptCount attribute:

    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="10" debug="0" connectionTimeout="60000"/>

Scott Nichol

----- Original Message -----
From: "Tiago Fernandes Thomaz" <ti...@optimus.pt>
To: <so...@xml.apache.org>
Sent: Monday, April 22, 2002 5:58 AM
Subject: Heavy loads on SOAP RPC


> Hi,
>
> I'm facing some trouble concerning heavy loads on soap rpc.
> I coded a soap client that simulates several clients with a Thread
> implementation.
> My snippet code is:
>
> public class SOAPClient
> {
>   public static void main (String[] args) throws Exception
>   {
>     URL url = new URL(args[0]);
>     String sXML = null;
>
>     for (int i = 0; i < 50; i++)
>     {
>         sXML = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><request client
> = \"client"+i+"\" action = \"action"+i+"\"><parameter name =
> \"name"+i+"\">My Name"+i+"</parameter></request> ";
>
>       Call call = new Call();
>       call.setTargetObjectURI("urn:Connector");
>       call.setMethodName("sendRequest");
>       call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
>       Vector params = new Vector();
>       params.addElement(new org.apache.soap.rpc.Parameter("sXML",
> String.class, sXML, null));
>
>       call.setParams(params);
>
>       (new TestThread(call, url)).start();
>     }
>   }
> }
>
>
> public class TestThread extends Thread
> {
>   Call testCall = null;
>   URL  url = null;
>
>   public TestThread(Call testCall, URL url)
>   {
>     this.testCall = testCall;
>     this.url = url;
>   }
>
>   public void run()
>   {
>     try {
>       org.apache.soap.rpc.Response resp = testCall.invoke(url, "");
>
>       if (resp.generatedFault())
>       {
>         Fault fault = resp.getFault();
>         System.out.println(this.getName() + "Fault Code   = " +
> fault.getFaultCode());
>         System.out.println(this.getName() + "Fault String = " +
> fault.getFaultString());
>       }
>       else
>       {
>         org.apache.soap.rpc.Parameter result = resp.getReturnValue();
>         String res = result.toString();
>         Object obj = result.getValue();
>         String resp2 = obj.toString();
>         System.out.println(this.getName()+" - Result: "+resp2);
>       }
>     }
>     catch (Exception e)
>     {
>       System.out.println(this.getName() + " :Error! - " + e.getMessage());
>     }
>   }
> }
>
> , and I'm getting the following exception for most of the Threads (30 out of
> 50):
>
> Thread-i Error opening socket: Connection refused: connect
>
> Does anyone explain me why am I getting this? Is it because SOAP can only
> handle about 20 http connections?
>
> Tiago Fernandes Thomaz
>


Re: Heavy loads on SOAP RPC

Posted by Scott Nichol <sn...@scottnichol.com>.
The Web server and/or servlet container against which you are testing probably
has a limit set for the number of connections it will queue.  In Tomcat 3.2.1,
for example, server.xml has the "backlog" parameter for a Connector:

        <!-- Normal HTTP -->
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="8080"/>
            <Parameter name="backlog" value="100"/>
        </Connector>

In Tomcat 4.0.1, the Connector has an acceptCount attribute:

    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="10" debug="0" connectionTimeout="60000"/>

Scott Nichol

----- Original Message -----
From: "Tiago Fernandes Thomaz" <ti...@optimus.pt>
To: <so...@xml.apache.org>
Sent: Monday, April 22, 2002 5:58 AM
Subject: Heavy loads on SOAP RPC


> Hi,
>
> I'm facing some trouble concerning heavy loads on soap rpc.
> I coded a soap client that simulates several clients with a Thread
> implementation.
> My snippet code is:
>
> public class SOAPClient
> {
>   public static void main (String[] args) throws Exception
>   {
>     URL url = new URL(args[0]);
>     String sXML = null;
>
>     for (int i = 0; i < 50; i++)
>     {
>         sXML = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><request client
> = \"client"+i+"\" action = \"action"+i+"\"><parameter name =
> \"name"+i+"\">My Name"+i+"</parameter></request> ";
>
>       Call call = new Call();
>       call.setTargetObjectURI("urn:Connector");
>       call.setMethodName("sendRequest");
>       call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
>       Vector params = new Vector();
>       params.addElement(new org.apache.soap.rpc.Parameter("sXML",
> String.class, sXML, null));
>
>       call.setParams(params);
>
>       (new TestThread(call, url)).start();
>     }
>   }
> }
>
>
> public class TestThread extends Thread
> {
>   Call testCall = null;
>   URL  url = null;
>
>   public TestThread(Call testCall, URL url)
>   {
>     this.testCall = testCall;
>     this.url = url;
>   }
>
>   public void run()
>   {
>     try {
>       org.apache.soap.rpc.Response resp = testCall.invoke(url, "");
>
>       if (resp.generatedFault())
>       {
>         Fault fault = resp.getFault();
>         System.out.println(this.getName() + "Fault Code   = " +
> fault.getFaultCode());
>         System.out.println(this.getName() + "Fault String = " +
> fault.getFaultString());
>       }
>       else
>       {
>         org.apache.soap.rpc.Parameter result = resp.getReturnValue();
>         String res = result.toString();
>         Object obj = result.getValue();
>         String resp2 = obj.toString();
>         System.out.println(this.getName()+" - Result: "+resp2);
>       }
>     }
>     catch (Exception e)
>     {
>       System.out.println(this.getName() + " :Error! - " + e.getMessage());
>     }
>   }
> }
>
> , and I'm getting the following exception for most of the Threads (30 out of
> 50):
>
> Thread-i Error opening socket: Connection refused: connect
>
> Does anyone explain me why am I getting this? Is it because SOAP can only
> handle about 20 http connections?
>
> Tiago Fernandes Thomaz
>