tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: Intermittent java.util.ConcurrentModificationException and java.lang.NullPointerException on TomEE 7.0.2
Date Mon, 06 Feb 2017 16:31:40 GMT
I'm not sure it is linked but tomcat already solved some issue in that area.


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:29 GMT+01:00 Danilo Cominotti Marques <dcominottim@gmail.com>:

> 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