Skip to content
This repository has been archived by the owner on Feb 5, 2019. It is now read-only.

JAX WS builtin Server implementation is very slow on Linux #1219

Open
LanceAndersen opened this issue Apr 17, 2018 · 0 comments
Open

JAX WS builtin Server implementation is very slow on Linux #1219

LanceAndersen opened this issue Apr 17, 2018 · 0 comments

Comments

@LanceAndersen
Copy link

Previously tracked at: https://bugs.openjdk.java.net/browse/JDK-8193236
FULL PRODUCT VERSION :
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Linux c0ab5270bb70 4.9.49-moby #1 SMP Wed Sep 27 23:17:17 UTC 2017 x86_64 GNU/Linux

A DESCRIPTION OF THE PROBLEM :
The built-in JAX WS server implementation works 100 times slower on linux machines then on Mac OS X or Windows. JMH test is published here: https://github.com/Andremoniy/linuxjvmjaxwstest

Basically it does the following:

  1. starts a JAX WS with one SOAP method:
    endpoint = Endpoint.publish("http://localhost:8888/", new FooServiceImpl());
  2. performs client requests to this method:
    String result = state.client.foo(state.foo);

On Mac OS X with 2 Cores Intel Core i7 it gives:

JMH version: 1.19

VM version: JDK 1.8.0_151, VM 25.151-b12

VM invoker: /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre/bin/java

...
Result "test.openjdk.MyBenchmark.testMethod":
3077.813 ±(99.9%) 51.818 ops/s [Average]
(min, avg, max) = (1718.347, 3077.813, 3315.271), stdev = 219.400
CI (99.9%): [3025.995, 3129.630] (assumes normal distribution)

Run complete. Total time: 00:06:49

Benchmark Mode Cnt Score Error Units
MyBenchmark.testMethod thrpt 200 3077.813 ± 51.818 ops/s

The same machine, docker without CPU limitations:

JMH version: 1.19

VM version: JDK 1.8.0_151, VM 25.151-b12

VM invoker: /usr/java/jdk1.8.0_151/jre/bin/java

...
Result "test.openjdk.MyBenchmark.testMethod":
19.882 ?(99.9%) 0.169 ops/s [Average]
(min, avg, max) = (10.031, 19.882, 20.104), stdev = 0.715
CI (99.9%): [19.714, 20.051] (assumes normal distribution)

Run complete. Total time: 00:07:01

Benchmark Mode Cnt Score Error Units
MyBenchmark.testMethod thrpt 200 19.882 ? 0.169 ops/s

The situation changes if JAX WS server is started with Jetty (there is no performance issues):
ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection();
server.setHandler(contextHandlerCollection);

JettyHttpServerProvider.setServer(server); 
HttpContext context = new JettyHttpServerProvider().createHttpServer(new InetSocketAddress(8888), 5).createContext("/"); 

Endpoint endpoint = Endpoint.create(new MyBenchmark.FooServiceImpl()); 
endpoint.publish(context); 

server.start(); 

Please, refer also: https://stackoverflow.com/questions/47645817/jax-ws-server-implementation-performance-issue-for-linux-jvm

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
On linux machine (for instance, docker pull openjdk:8u151)

git init
git clone https://github.com/Andremoniy/openjdkjaxwstest
mvn package
cd target
java -jar benchmark.jar

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The performance should be the about 3000-5000 ops/s.
ACTUAL -
The performance is about 20 ops/s.

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
https://github.com/Andremoniy/linuxjvmjaxwstest
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Use Jetty server for publishing WS.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant