Thanks James for the response .. I have created Jira issue. https://issues.apache.org/jira/browse/CAMEL-6832
Yes, I know which code causing this issue and how to fix that. But I don't know other usecases (around the code where the fix needed). I will spend some time and will update my finding/fix in Jira issue. @All, Please follow Jira issue for further details. Thanks, Nurali ________________________________ From: James Carman <ja...@carmanconsulting.com> To: "users@camel.apache.org" <users@camel.apache.org>; Nurali Techie <nurali.tec...@yahoo.com> Sent: Friday, October 4, 2013 4:32 PM Subject: Re: Memory leak - when an exception is thrown during the scheduling phase Create a JIRA. Looks like you may have a patch in mind? Do you have test cases? On Friday, October 4, 2013, Nurali Techie wrote: Hello, > > > >I have observed a memory leak for Quartz worker thread in case an exception is >thrown during the scheduling phase when schedule is set to past time. >I have observed this issue with camel-quart 2.10.4, 2.11.0, 2.11.2 versions. > >For ex, assuming today is 4-Oct; If a schedule is provided for yesterday (i.e >3-Oct) then below sequence happen: > >1. Quartz create worker thread for new schedule [generally TEN Threads with >name 'DefaultQuartzScheduler'] >2. Camel-quartz increment jobCounter for scheduler context [using >QuartzComponent.incrementJobCounter()] >3. Camel-quartz tries to create new schedule [using Scheduler.scheduleJob()] >4. scheduleJob() throws SchedulerException with the message - 'Based on >configured schedule, the given trigger will never fire' >5. Camel-quartz does NOT decrement the job counter and jobCounter value >remains '1' >6. Later Camel-Quartz stops the route and call QuartzComponent.doStop() >7. In doStop(), Scheduler.shutdown() supposed to be called so that those TEN >threads are removed but to call shutdown() the pre-condition is that the >jobCounter should be '0'. In this case jobCounter is '1' and >Scheduler.shutdown() will NOT be called and those TEN threads are NOT removed. > This is memory leak. > >Please find the stack trace [with Camel-Quartz 2.11.2 and >org.apache.servicemix.bundles.quartz-1.8.6_1 which wrapped Quartz Scheduler as >OSGi bundle] when SchedulerException is thrown at step 4 in above sequence. > >Let me know if you want me to create JIRA issue. > >Thanks, >Nurali > >** Stack Trace: > >15:55:22.432 ERROR [Blueprint Extender: 1] o.a.c.b.BlueprintCamelContext >[BlueprintCamelContext.java:139] - Error occurred during starting Camel: >CamelContext(sfsftest35) due Based on configured schedule, the given trigger >will never fire. >org.quartz.SchedulerException: Based on configured schedule, the given trigger >will never fire. >at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:793) >~[na:na] >at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:243) ~[na:na] >at >org.apache.camel.component.quartz.QuartzComponent.doAddJob(QuartzComponent.java:232) > ~[na:na] >at >org.apache.camel.component.quartz.QuartzComponent.addJob(QuartzComponent.java:222) > ~[na:na] >at >org.apache.camel.component.quartz.QuartzEndpoint.addTrigger(QuartzEndpoint.java:81) > ~[na:na] >at >org.apache.camel.component.quartz.QuartzEndpoint.consumerStarted(QuartzEndpoint.java:213) > ~[na:na] >at >org.apache.camel.component.quartz.QuartzConsumer.doStart(QuartzConsumer.java:39) > ~[na:na] >at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) >~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:1819) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:2113) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:2049) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1979) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1758) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1633) > ~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1500) > ~[na:na] >at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) >~[na:na] >at >org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1468) >~[na:na] >at >org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:167) > [bundlefile:2.11.2] >at >org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:199) > [bundlefile:2.11.2] >at >org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:137) > [bundlefile:2.11.2] >at >org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:950) > [org.eclipse.org.eclipse.osgi-3.8.0.v20120529-1548.jar:na] >at >org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:96) > [bundlefile:2.11.2] >at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_40] >at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_40] >at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) >~[na:1.7.0_40] >at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_40] >at >org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297) > [bundlefile:1.1.0-sap-01] >at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958) >[bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:712) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787) > [bundlefile:1.1.0-sap-01] >at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79) >[bundlefile:1.1.0-sap-01] >at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_40] >at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88) >[bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:668) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:370) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261) > [bundlefile:1.1.0-sap-01] >at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) >[na:1.7.0_40] >at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_40] >at >org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) > [bundlefile:1.1.0-sap-01] >at >org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) > [bundlefile:1.1.0-sap-01] >at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) >[na:1.7.0_40] >at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_40] >at >java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown > Source) [na:1.7.0_40] >at >java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown > Source) [na:1.7.0_40] >at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) >[na:1.7.0_40] >at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) >[na:1.7.0_40] >at java.lang.Thread.run(Unknown Source) [na:1.7.0_40]