Uso le seguenti librerie.Spring + Quartz = Memory Leaks
- quarzo-2.2.1
- primavera-webmvc-3.2.9.RELEASE
su Apache Tomcat/7.0.52 (Ubuntu).
Uso Spring per configurare Quarzo.
@Configuration
class QuartzConfig {
@Bean
FactoryBean<Scheduler> scheduler() {
final SchedulerFactoryBean factory = new SchedulerFactoryBeanWithShutdownDelay();
final Map<String, Object> map = new LinkedHashMap<>();
map.put("settingsService", settingsService);
final List<AbstractQuartzJob> jobs = new LinkedList<>();
jobs.add(dbBackupJob());
jobs.add(csvExportJob());
jobs.add(csvImportJob());
jobs.add(dbMaintenanceJob());
jobs.add(filesystemCleanupJob());
map.put("jobs", jobs);
factory.setSchedulerContextAsMap(map);
factory.setTriggers(new Trigger[] {cronTrigger});
return factory;
}
}
Cercato molto oggi perché le attività di pianificazione in cui si arresta correttamente ...
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-1] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-2] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-3] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-4] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-5] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-6] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-7] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-8] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-9] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-10] but has failed to stop it. This is very likely to create a memory leak.
Il brutto hack era di scrivere la classe SchedulerFactoryBeanWithShutdownDelay.
public class SchedulerFactoryBeanWithShutdownDelay extends SchedulerFactoryBean {
private static final int SHUTDOWN_TIMEOUT = 2000;
@Override
public void destroy() throws SchedulerException {
log.debug("Start shutdown of Quartz scheduler factory bean");
super.destroy();
try {
log.debug("wait {}ms to shutdown Quartz", SHUTDOWN_TIMEOUT);
Thread.sleep(SHUTDOWN_TIMEOUT);
log.debug("Quartz scheduler shutdown completed");
} catch (InterruptedException e) {
log.error("", e);
}
}
}
Ma questo problema avrebbe dovuto essere chiuso: https://jira.terracotta.org/jira/browse/QTZ-192
ho io commesso un errore o può questo essere confermato?
Solo per curiosità, perché utilizzare i quarti quando Spring ha il proprio programmatore incorporato? –
Perché no? Forse è storicamente. L'ho usato da quando abbiamo avviato il progetto e lavorato piuttosto bene, tranne i problemi durante l'arresto o il riavvio dell'applicazione web che non era un problema per noi. – Nabor
Hai effettivamente una perdita di memoria o sei appena portato via con i messaggi nel tuo logfile? Si noti inoltre che primavera richiama di default 'scheduler.shutdown (false)' mentre il problema menziona 'scheduler.shutdown (true)'. Per abilitare quest'ultimo impostare la proprietà 'waitForJobsToCompleteOnShutdown' su' SchedulerFactoryBean' su 'true'. –