Axis
  1. Axis
  2. AXIS-1323

Poor performance with large amount of data

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.2 Beta
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Environment:
      Windows XP, Tomcat 5.0.16

      Description

      I have compared AXIS and WASP 4.7 with simple test. I'm passing String array to the service that doesn't do anything to that array. Service only returns a String message. The test measures the time consumed for the call.

      Here are the results:
      ARRAY_SIZE AXIS(ms) WASP(ms)
      100 468 717
      1000 1418 811
      10000 10726 1310
      100000 OutOfMem 5176

      AXIS can handle small amount of data fairly well, but WASP beats AXIS with larger arrays.

      Sample code of the service:

      public String handleStringArray(String s[])

      { String returnString; returnString = "array lenght was: " + s.length; return returnString; }

      Sample code of the client:

      String[] s = new String[1000];
      for(int i = 0; i < s.length; i++)

      { s[i] = "qwertyuiopåasdfghjklöäzxcvbnm"; }

      TimeServiceServiceLocator locator = new TimeServiceServiceLocator();
      TimeService service = locator.getTimeServiceAxis();

      start = new Date();
      result = service.handleStringArray(s);
      end = new Date();

      System.out.println("Time consumed: " + (end.getTime() - start.getTime()));

      1. perf.zip
        6 kB
        Davanum Srinivas

        Activity

        Hide
        Davanum Srinivas added a comment -

        Thanks, at 100000 we are still a tad slower than WASP. Am not sure if i have enough time to squeeze a bit more performance...

        – dims

        Show
        Davanum Srinivas added a comment - Thanks, at 100000 we are still a tad slower than WASP. Am not sure if i have enough time to squeeze a bit more performance... – dims
        Hide
        Jani Väisänen added a comment -

        Here are my results:

        [junit] Running samples.perf.PerfService_ServiceTestCase
        [junit] - >>>> Warming up...
        [junit] - Count:1 Time consumed: 484 Return:array length was - 1
        [junit] - >>>> Running volume tests...
        [junit] - Count:100 Time consumed: 93 Return:array length was - 100
        [junit] - Count:1000 Time consumed: 422 Return:array length was - 1000
        [junit] - Count:10000 Time consumed: 1232 Return:array length was - 10000
        [junit] - Count:100000 Time consumed: 8984 Return:array length was - 100000
        [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 12,4 sec

        Pentium 4 2.4GHz, 1GB of RAM, WinXP

        The results are great - thank you! Great work!

        Show
        Jani Väisänen added a comment - Here are my results: [junit] Running samples.perf.PerfService_ServiceTestCase [junit] - >>>> Warming up... [junit] - Count:1 Time consumed: 484 Return:array length was - 1 [junit] - >>>> Running volume tests... [junit] - Count:100 Time consumed: 93 Return:array length was - 100 [junit] - Count:1000 Time consumed: 422 Return:array length was - 1000 [junit] - Count:10000 Time consumed: 1232 Return:array length was - 10000 [junit] - Count:100000 Time consumed: 8984 Return:array length was - 100000 [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 12,4 sec Pentium 4 2.4GHz, 1GB of RAM, WinXP The results are great - thank you! Great work!
        Hide
        Richard Martin added a comment -

        Hi dims, all:

        [junit] Running samples.perf.PerfService_ServiceTestCase
        [junit] - >>>> Warming up...
        [junit] - Count:1 Time consumed: 513 Return:array length was - 1
        [junit] - >>>> Running volume tests...
        [junit] - Count:100 Time consumed: 165 Return:array length was

        • 100
          [junit] - Count:1000 Time consumed: 647 Return:array length was
        • 1000
          [junit] - Count:10000 Time consumed: 1921 Return:array length was
        • 10000
          [junit] - Count:100000 Time consumed: 12833 Return:array length was
        • 100000
          [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 18.149 sec

        Athlon 1.3 with 512 Meg of ram and 2.4 kernel on RH9

        Show
        Richard Martin added a comment - Hi dims, all: [junit] Running samples.perf.PerfService_ServiceTestCase [junit] - >>>> Warming up... [junit] - Count:1 Time consumed: 513 Return:array length was - 1 [junit] - >>>> Running volume tests... [junit] - Count:100 Time consumed: 165 Return:array length was 100 [junit] - Count:1000 Time consumed: 647 Return:array length was 1000 [junit] - Count:10000 Time consumed: 1921 Return:array length was 10000 [junit] - Count:100000 Time consumed: 12833 Return:array length was 100000 [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 18.149 sec Athlon 1.3 with 512 Meg of ram and 2.4 kernel on RH9
        Hide
        Jim Murphy added a comment -

        From the latest CVS:
        [junit] Running samples.perf.PerfService_ServiceTestCase
        [junit] - >>>> Warming up...
        [junit] - Count:1 Time consumed: 401 Return:array length was - 1
        [junit] - >>>> Running volume tests...
        [junit] - Count:100 Time consumed: 120 Return:array length was - 100
        [junit] - Count:1000 Time consumed: 451 Return:array length was - 1000
        [junit] - Count:10000 Time consumed: 1292 Return:array length was - 10000
        [junit] - Count:100000 Time consumed: 9003 Return:array length was - 100000
        [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 12.859 sec

        Show
        Jim Murphy added a comment - From the latest CVS: [junit] Running samples.perf.PerfService_ServiceTestCase [junit] - >>>> Warming up... [junit] - Count:1 Time consumed: 401 Return:array length was - 1 [junit] - >>>> Running volume tests... [junit] - Count:100 Time consumed: 120 Return:array length was - 100 [junit] - Count:1000 Time consumed: 451 Return:array length was - 1000 [junit] - Count:10000 Time consumed: 1292 Return:array length was - 10000 [junit] - Count:100000 Time consumed: 9003 Return:array length was - 100000 [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 12.859 sec
        Hide
        Davanum Srinivas added a comment -

        Checked in a bunch of changes. please get the latest cvs and the unit test cases in samples/perf directory. basically run "ant clean" followed by "ant" in ws-axis/java. then run "ant compile run" in ws-axis/java/samples/perf and report the results to this bug report.

        BTW, on a VERY good machine am getting the following:

        [junit] Running samples.perf.PerfService_ServiceTestCase
        [junit] - >>>> Warming up...
        [junit] - Count:1 Time consumed: 265 Return:array length was - 1
        [junit] - >>>> Running volume tests...
        [junit] - Count:100 Time consumed: 63 Return:array length was - 100
        [junit] - Count:1000 Time consumed: 219 Return:array length was - 1000
        [junit] - Count:10000 Time consumed: 890 Return:array length was - 10000
        [junit] - Count:100000 Time consumed: 7328 Return:array length was - 100000
        [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 9.859 sec

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - Checked in a bunch of changes. please get the latest cvs and the unit test cases in samples/perf directory. basically run "ant clean" followed by "ant" in ws-axis/java. then run "ant compile run" in ws-axis/java/samples/perf and report the results to this bug report. BTW, on a VERY good machine am getting the following: [junit] Running samples.perf.PerfService_ServiceTestCase [junit] - >>>> Warming up... [junit] - Count:1 Time consumed: 265 Return:array length was - 1 [junit] - >>>> Running volume tests... [junit] - Count:100 Time consumed: 63 Return:array length was - 100 [junit] - Count:1000 Time consumed: 219 Return:array length was - 1000 [junit] - Count:10000 Time consumed: 890 Return:array length was - 10000 [junit] - Count:100000 Time consumed: 7328 Return:array length was - 100000 [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 9.859 sec thanks, dims
        Hide
        Jani Väisänen added a comment -

        Actually I'm using nightly snapshots of the cvs because firewall is blocking direct connections to the cvs. But I can compile everything and set from the client Call.STREAMING_PROPERTY... so I should have the latest version.

        Show
        Jani Väisänen added a comment - Actually I'm using nightly snapshots of the cvs because firewall is blocking direct connections to the cvs. But I can compile everything and set from the client Call.STREAMING_PROPERTY... so I should have the latest version.
        Hide
        Davanum Srinivas added a comment -

        just to be sure...you are using current CVS. right?

        Show
        Davanum Srinivas added a comment - just to be sure...you are using current CVS. right?
        Hide
        Jani Väisänen added a comment -

        I tried SimpleAxisServer and your example but the results were same.

        Show
        Jani Väisänen added a comment - I tried SimpleAxisServer and your example but the results were same.
        Hide
        Davanum Srinivas added a comment -

        Can you try using SimpleAxisServer? (http://nagoya.apache.org/wiki/apachewiki.cgi?SimpleAxisServer)

        – dims

        Show
        Davanum Srinivas added a comment - Can you try using SimpleAxisServer? ( http://nagoya.apache.org/wiki/apachewiki.cgi?SimpleAxisServer ) – dims
        Hide
        Davanum Srinivas added a comment -

        did you use my example. can you please try it?

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - did you use my example. can you please try it? thanks, dims
        Hide
        Davanum Srinivas added a comment -

        Here's the result running against latest CVS (see the sample code that i uploaded as well).

        >>>> Warming up...
        Count:1 Time consumed: 2253 Return:array length was: 1
        >>>> Running volume tests...
        Count:100 Time consumed: 131 Return:array length was: 100
        Count:1000 Time consumed: 440 Return:array length was: 1000
        Count:10000 Time consumed: 1803 Return:array length was: 10000
        Count:100000 Time consumed: 9423 Return:array length was: 100000

        Thanks,
        dims

        Show
        Davanum Srinivas added a comment - Here's the result running against latest CVS (see the sample code that i uploaded as well). >>>> Warming up... Count:1 Time consumed: 2253 Return:array length was: 1 >>>> Running volume tests... Count:100 Time consumed: 131 Return:array length was: 100 Count:1000 Time consumed: 440 Return:array length was: 1000 Count:10000 Time consumed: 1803 Return:array length was: 10000 Count:100000 Time consumed: 9423 Return:array length was: 100000 Thanks, dims
        Hide
        Davanum Srinivas added a comment -

        Zip file with sample service and client code that i used for testing. the sample client uses the new Call.STREAMING_PROPERTY as well.

        Show
        Davanum Srinivas added a comment - Zip file with sample service and client code that i used for testing. the sample client uses the new Call.STREAMING_PROPERTY as well.
        Hide
        Davanum Srinivas added a comment -

        Please pick up the latest CVS and Can you please try switching on the streaming option? (streaming="on" in the deploy.wsdd)

        <deployment
        xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
        <service name="ArrayPort" provider="java:RPC" streaming="on">
        <parameter name="className" value="ArrayService"/>
        </service>
        </deployment>

        Am getting very good results:
        Count:100 Time consumed: 100
        Count:1000 Time consumed: 271
        Count:10000 Time consumed: 1352
        Count:100000 Time consumed: 8422

        Thanks,
        dims

        Show
        Davanum Srinivas added a comment - Please pick up the latest CVS and Can you please try switching on the streaming option? (streaming="on" in the deploy.wsdd) <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="ArrayPort" provider="java:RPC" streaming="on"> <parameter name="className" value="ArrayService"/> </service> </deployment> Am getting very good results: Count:100 Time consumed: 100 Count:1000 Time consumed: 271 Count:10000 Time consumed: 1352 Count:100000 Time consumed: 8422 Thanks, dims
        Hide
        Davanum Srinivas added a comment -

        yes, am working on it.

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - yes, am working on it. thanks, dims
        Hide
        Jani Väisänen added a comment -

        My mistake... I had to configure memory settings. Now I can run also the last test. The results are:

        Count:100 Time consumed: 359
        Count:1000 Time consumed: 1062
        Count:10000 Time consumed: 6781
        Count:100000 Time consumed: 61686

        Is there any chance to improve the performance in the near future?

        Show
        Jani Väisänen added a comment - My mistake... I had to configure memory settings. Now I can run also the last test. The results are: Count:100 Time consumed: 359 Count:1000 Time consumed: 1062 Count:10000 Time consumed: 6781 Count:100000 Time consumed: 61686 Is there any chance to improve the performance in the near future?
        Hide
        Davanum Srinivas added a comment -

        Here are the #'s am getting with latest CVS. Can you try getting the full cvs instead of getting individual files? clean up your environment and try again?

        Count:100 Time consumed: 140
        Count:1000 Time consumed: 841
        Count:10000 Time consumed: 7000
        Count:100000 Time consumed: 68479

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - Here are the #'s am getting with latest CVS. Can you try getting the full cvs instead of getting individual files? clean up your environment and try again? Count:100 Time consumed: 140 Count:1000 Time consumed: 841 Count:10000 Time consumed: 7000 Count:100000 Time consumed: 68479 thanks, dims
        Hide
        Jani Väisänen added a comment -

        I guess that I'm or the code is missing something, beacause the last change to non-high-fidelity recording didn't have any affect on the results.

        I took these classes from the cvs:
        java/src/org/apache/axis MessageContext.java
        java/src/org/apache/axis/handlers/soap SOAPService.java
        java/src/org/apache/axis/deployment/wsdd WSDDService.java

        You didn't do any more changes?

        Show
        Jani Väisänen added a comment - I guess that I'm or the code is missing something, beacause the last change to non-high-fidelity recording didn't have any affect on the results. I took these classes from the cvs: java/src/org/apache/axis MessageContext.java java/src/org/apache/axis/handlers/soap SOAPService.java java/src/org/apache/axis/deployment/wsdd WSDDService.java You didn't do any more changes?
        Hide
        Davanum Srinivas added a comment -

        Made one more change with bug implications (http://marc.theaimsgroup.com/?l=axis-dev&m=108243232813631&w=2), please try it out and let us know the new numbers.

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - Made one more change with bug implications ( http://marc.theaimsgroup.com/?l=axis-dev&m=108243232813631&w=2 ), please try it out and let us know the new numbers. thanks, dims
        Hide
        Jani Väisänen added a comment -

        Your changes helped a bit. Now AXIS can handle an array of 10000 Strings approximately in 6 seconds. But still the difference compared to WASP is huge and AXIS cannot handle an array of 100000 Strings.

        Show
        Jani Väisänen added a comment - Your changes helped a bit. Now AXIS can handle an array of 10000 Strings approximately in 6 seconds. But still the difference compared to WASP is huge and AXIS cannot handle an array of 100000 Strings.
        Hide
        Davanum Srinivas added a comment -

        Can you please try latest cvs. i made a few changes that may help.

        thanks,
        dims

        Show
        Davanum Srinivas added a comment - Can you please try latest cvs. i made a few changes that may help. thanks, dims

          People

          • Assignee:
            Unassigned
            Reporter:
            Jani Väisänen
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:

              Development