tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Danilo Cominotti Marques <dcominot...@gmail.com>
Subject Re: Intermittent java.util.ConcurrentModificationException and java.lang.NullPointerException on TomEE 7.0.2
Date Mon, 06 Feb 2017 16:29:45 GMT
Hello Romain,

Does it mean a fix is probably already on master and will land in 7.0.3?
But what about the NIO2 connector issue? Could it be related to the
ManagedExecutorService one?

On Mon, Feb 6, 2017 at 2:24 PM, Romain Manni-Bucau <rmannibucau@gmail.com>
wrote:

> Hi
>
> likely linked to the ManagedExecutorService, fixed on master normally
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/
> rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-02-06 17:22 GMT+01:00 Danilo Cominotti Marques <dcominottim@gmail.com
> >:
>
> > Hello there,
> >
> > I am testing a JAX-RS + CDI + EJB app on TomEE Plus 7.0.2 and am getting
> > the following exception from time to time:
> >
> >
> > Exception in thread "managed-thread-88"
> > java.util.ConcurrentModificationException
> >         at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
> >         at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
> >         at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
> >         at java.util.HashMap.putMapEntries(HashMap.java:511)
> >         at java.util.HashMap.putAll(HashMap.java:784)
> >         at
> > java.util.Collections$SynchronizedMap.putAll(Collections.java:2594)
> >         at
> > org.apache.openejb.core.ThreadContext.<init>(ThreadContext.java:143)
> >         at
> > org.apache.openejb.threads.task.CUTask$Context.enter(CUTask.java:188)
> >         at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:78)
> >         at
> > org.apache.openejb.threads.task.CURunnable.run(CURunnable.java:32)
> >         at
> > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1142)
> >         at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:617)
> >         at java.lang.Thread.run(Thread.java:745)
> >
> >
> > This issue shows up intermittently during my tests with a Gatling script,
> > which simulates 1000 users sending 10 requests each as fast as possible.
> > Here is a code snippet from my EJB Session Bean:
> >
> >
> > @Stateless
> > public class AsyncFeatureRunner implements FeatureRunner {
> >
> >     @Resource
> >     private ManagedExecutorService managedExecutorService;
> >
> >
> >     @Override
> >     public <Input, Output> CompletableFuture<Output>
> > run(RunnableFeature<Input, Output> runnableFeature, Input featureInput) {
> >         return CompletableFuture.supplyAsync(
> >                 () -> runnableFeature.run(featureInput),
> > managedExecutorService
> >         );
> >     }
> > }
> >
> >
> > Also, some of my HTTP requests are timing out/being refused, although my
> > NIO2 connector's configuration seems OK. Here is the error message I get
> > when I stop TomEE after I notice my Gatling script is taking too long to
> > finish:
> >
> >
> > 06-Feb-2017 14:00:08.057 SEVERE [http-nio2-8080-exec-142]
> > sun.reflect.NativeMethodAccessorImpl.invoke Exception while processing
> an
> > asynchronous request
> >  java.lang.NullPointerException
> >         at
> > org.apache.catalina.core.AsyncContextImpl.setErrorState(
> > AsyncContextImpl.java:412)
> >         at
> > org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(
> > CoyoteAdapter.java:158)
> >         at
> > org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:228)
> >         at
> > org.apache.coyote.AbstractProcessorLight.process(
> > AbstractProcessorLight.java:53)
> >         at
> > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
> > AbstractProtocol.java:802)
> >         at
> > org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.
> > doRun(Nio2Endpoint.java:1609)
> >         at
> > org.apache.tomcat.util.net.SocketProcessorBase.run(
> > SocketProcessorBase.java:49)
> >         at
> > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1142)
> >         at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:617)
> >         at
> > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> > TaskThread.java:61)
> >         at java.lang.Thread.run(Thread.java:745)
> >
> >
> > Here is the connector's configuration from server.xml:
> >
> >
> > <Connector port="8080" redirectPort="8443"
> > protocol="org.apache.coyote.http11.Http11Nio2Protocol"
> >            maxThreads="200" maxConnections="10000" acceptCount="10000"
> > SSLEnabled="false">
> > </Connector>
> >
> >
> > and here is my JAX-RS resource's code:
> >
> >
> > @Path("/test/")
> > @RequestScoped
> > public RestEndpoint {
> >
> >     @Inject
> >     private FeatureRunner featureRunner;
> >
> >     @Inject
> >     private CreateUserFeature createUserFeature;
> >
> >
> >     @GET
> >     @Path("/")
> >     @Produces("application/json")
> >     public void post(@Suspended final AsyncResponse asyncResponse) {
> >         featureRunner.run(
> >                 createUserFeature, new CreateUserFeature.Input()
> >         ).thenAccept(
> >                 output -> asyncResponse.resume(
> >                         Response.ok().build()
> >                 )
> >         ).exceptionally(
> >                 throwable -> {
> >                     asyncResponse.resume(
> >                             Response.serverError().build()
> >                     );
> >                     return null;
> >                 }
> >         );
> >     }
> > }
> >
> >
> > Finally, here is the Gatling script:
> >
> >
> > import scala.concurrent.duration._
> >
> > import io.gatling.core.Predef._
> > import io.gatling.http.Predef._
> > import io.gatling.jdbc.Predef._
> >
> > class RecordedSimulation extends Simulation {
> >
> > val httpProtocol = http
> > .baseURL("http://localhost:8080")
> > .inferHtmlResources()
> > .acceptHeader("text/html,application/json,application/
> > xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
> > .acceptEncodingHeader("gzip, deflate, sdch")
> > .acceptLanguageHeader("en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4")
> > .upgradeInsecureRequestsHeader("1")
> > .userAgentHeader("Mozilla/5.0 (Windows NT 10.0; Win64; x64)
> > AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87
> Safari/537.36")
> >
> >
> >
> >     val uri1 = "http://localhost:8080/my-app/rest/test"
> >
> > val scn = scenario("RecordedSimulation").repeat(10, "n") {
> > exec(http("request_0")
> > .get("/my-app/rest/test"))
> > }
> >
> > setUp(scn.inject(atOnceUsers(1000))).protocols(httpProtocol)
> > }
> >
> >
> > Does anyone know what might be the cause of these issues?
> >
> > Thank you.
> >
> > Regards,
> >
> > Danilo Cominotti Marques
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message