[ 
https://issues.apache.org/jira/browse/BROOKLYN-181?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14959581#comment-14959581
 ] 

Aled Sage commented on BROOKLYN-181:
------------------------------------

Investigating further where all of these tasks are coming from:

{noformat}
Thread [brooklyn-jetty-server-8081-qtp9885135-1084] (Suspended (breakpoint at 
line 549 in BasicExecutionManager))       
        owns: DynamicSequentialTask<T>  (id=1868)       
        BasicExecutionManager.submitNewTask(Map<?,?>, Task<T>) line: 549        
        BasicExecutionManager.submit(Map<?,?>, TaskAdaptable<T>) line: 349      
        BasicExecutionContext.submitInternal(Map<?,?>, Object) line: 197        
        
BasicExecutionContext(AbstractExecutionContext).submit(TaskAdaptable<T>) line: 
57       
        ValueResolver<T>.getMaybeInternal() line: 330   
        ValueResolver<T>.getMaybe() line: 245   
        ValueResolver<T>.get() line: 238        
        
AbstractBrooklynRestResource$RestValueResolver.getImmediateValue(Object, 
Entity) line: 140      
        AbstractBrooklynRestResource$RestValueResolver.resolve() line: 129      
        EntityConfigResource.batchConfigRead(String, String, Boolean) line: 80  
        GeneratedMethodAccessor50.invoke(Object, Object[]) line: not available  
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43  
        Method.invoke(Object, Object...) line: 606      
        JavaMethodInvokerFactory$1.invoke(Method, Object, Object...) line: 60   
        AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(Object, 
HttpContext) line: 185  
        
AbstractResourceMethodDispatchProvider$TypeOutInvoker(ResourceJavaMethodDispatcher).dispatch(Object,
 HttpContext) line: 75      
        HttpMethodRule.accept(CharSequence, Object, UriRuleContext) line: 302   
        RightHandPathRule.accept(CharSequence, Object, UriRuleContext) line: 
147        
        ResourceObjectRule.accept(CharSequence, Object, UriRuleContext) line: 
100       
        RightHandPathRule.accept(CharSequence, Object, UriRuleContext) line: 
147        
        RootResourceClassesRule.accept(CharSequence, Object, UriRuleContext) 
line: 84   
        WebApplicationImpl._handleRequest(WebApplicationContext, 
ContainerRequest) line: 1542   
        WebApplicationImpl._handleRequest(WebApplicationContext, 
ContainerRequest, ContainerResponse) line: 1473        
        WebApplicationImpl.handleRequest(ContainerRequest, ContainerResponse) 
line: 1419        
        WebApplicationImpl.handleRequest(ContainerRequest, 
ContainerResponseWriter) line: 1409  
        ServletContainer$InternalWebComponent(WebComponent).service(URI, URI, 
HttpServletRequest, HttpServletResponse) line: 409        
        ServletContainer.service(URI, URI, HttpServletRequest, 
HttpServletResponse) line: 540   
        ServletContainer.doFilter(HttpServletRequest, HttpServletResponse, 
FilterChain, String, String, String) line: 909       
        ServletContainer.doFilter(HttpServletRequest, HttpServletResponse, 
FilterChain) line: 857       
        ServletContainer.doFilter(ServletRequest, ServletResponse, FilterChain) 
line: 811       
        ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) 
line: 1467 
        HaMasterCheckFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 101    
        ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) 
line: 1467 
        LoggingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 
line: 89   
        ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) 
line: 1467 
        BrooklynPropertiesSecurityFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain) line: 122       
        ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) 
line: 1467 
        RequestTaggingFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 49    
        ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) 
line: 1467 
        ServletHandler.doHandle(String, Request, HttpServletRequest, 
HttpServletResponse) line: 501     
        ServletHandler(ScopedHandler).handle(String, Request, 
HttpServletRequest, HttpServletResponse) line: 137        
        ConstraintSecurityHandler(SecurityHandler).handle(String, Request, 
HttpServletRequest, HttpServletResponse) line: 557   
        SessionHandler.doHandle(String, Request, HttpServletRequest, 
HttpServletResponse) line: 231     
        WebAppContext(ContextHandler).doHandle(String, Request, 
HttpServletRequest, HttpServletResponse) line: 1086     
        ServletHandler.doScope(String, Request, HttpServletRequest, 
HttpServletResponse) line: 429      
        SessionHandler.doScope(String, Request, HttpServletRequest, 
HttpServletResponse) line: 193      
        WebAppContext(ContextHandler).doScope(String, Request, 
HttpServletRequest, HttpServletResponse) line: 1020      
        WebAppContext(ScopedHandler).handle(String, Request, 
HttpServletRequest, HttpServletResponse) line: 135 
        
ContextHandlerCollectionHotSwappable(ContextHandlerCollection).handle(String, 
Request, HttpServletRequest, HttpServletResponse) line: 255       
        Server(HandlerWrapper).handle(String, Request, HttpServletRequest, 
HttpServletResponse) line: 116       
        Server.handle(AbstractHttpConnection) line: 370 
        AsyncHttpConnection(AbstractHttpConnection).handleRequest() line: 494   
        AsyncHttpConnection(AbstractHttpConnection).headerComplete() line: 971  
        AbstractHttpConnection$RequestHandler.headerComplete() line: 1033       
        HttpParser.parseNext() line: 644        
        HttpParser.parseAvailable() line: 235   
        AsyncHttpConnection.handle() line: 82   
        SelectChannelEndPoint.handle() line: 696        
        SelectChannelEndPoint$1.run() line: 53  
        QueuedThreadPool.runJob(Runnable) line: 608     
        QueuedThreadPool$3.run() line: 543      
        Thread.run() line: 745  
{noformat}

In other words, it caused by the polling of the web-console. The rest api's 
{{AbstractBrooklynRestResource$RestValueResolver.resolve()}} is doing:

{noformat}
return 
Tasks.resolving(value).as(Object.class).defaultValue(UNRESOLVED).timeout(Duration.ZERO).context(context).swallowExceptions().get();
{noformat}

which is supposed to execute immediately without blocking. But there is another 
task that is blocked on this (without a timeout), and is in the synchronized 
block (holding that lock) in 
{{org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslDeferredSupplier.get}}.

> OutOfMemoryError: unable to create new native thread (when stopping app)
> ------------------------------------------------------------------------
>
>                 Key: BROOKLYN-181
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-181
>             Project: Brooklyn
>          Issue Type: Bug
>    Affects Versions: 0.8.0
>            Reporter: Aled Sage
>         Attachments: many-threads.txt
>
>
> Using 0.9.0-SNAPSHOT...
> I deployed an app to OpenStack (Bluebox) - it failed due to insufficient 
> security groups etc. I terminated the VMs in Bluebox itself, and then I tried 
> to call the "Stop" effector on the app in Brooklyn. Eventually Brooklyn ran 
> out of threads.
> My app consisted of a riak cluster + web cluster.
> However, the log is messy because I had a couple of other apps that I also 
> started/stopped during this time (I think they are unrelated though).
> There are 2045 threads, of which 2012 are of the form 
> "brooklyn-execmanager-*".
> 998 of these threads are doing:
> {noformat}
> "brooklyn-execmanager-vvDaziiT-2847" daemon prio=5 tid=0x00007fd4f08aa800 
> nid=0xc7d0f waiting for monitor entry [0x0000700063d3f000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at 
> org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslDeferredSupplier.get(BrooklynDslDeferredSupplier.java:83)
>         - waiting to lock <0x00000007c5940bc8> (a 
> org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent$AttributeWhenReady)
>         at 
> org.apache.brooklyn.util.core.task.ValueResolver$2.call(ValueResolver.java:322)
>         at 
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:342)
>         at 
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:468)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}
> Another 999 threads look like:
> {noformat}
> "brooklyn-execmanager-vvDaziiT-2930" daemon prio=5 tid=0x00007fd4ef16f800 
> nid=0x5e07 in Object.wait() [0x0000700001703000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>         at java.lang.Object.wait(Native Method)
>         at 
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob$1.call(DynamicSequentialTask.java:275)
>         - locked <0x00000007c64bafa8> (a java.lang.Object)
>         at 
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob$1.call(DynamicSequentialTask.java:265)
>         at 
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:468)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}
> The logging shows the number of threads creeping up, with 30 more threads and 
> 30 more active tasks being added every minute, e.g.:
> {noformat}
> 2015-10-12 23:01:14,022 DEBUG o.a.b.c.m.i.BrooklynGarbageCollector 
> [brooklyn-gc]: brooklyn gc (after) - using 164 MB / 264 MB memory (20.9 kB 
> soft); 2001 threads; storage: {datagrid={size=7, createCount=7}, 
> refsMapSize=0, lis
> tsMapSize=0}; tasks: 1981 active, 999 unfinished; 1084 remembered, 286554 
> total submitted)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to