Mein Tomcat 7 verwendet, wird berichtet, dass es in meinem Webapp, die initialisiert wird, wenn die Webapp gestartetJava Webapp Speicherleck, wenn ScheduledExecutorService
SEVERE: The web application [/mywebapp] appears to have started a
thread named [pool-1-thread-1] but has failed to stop it. This is
very likely to create a memory leak.
Ich habe eine lange laufende Aufgabe ein Speicherleck in meinem Webapp sein kann.
public class MyContextListener implements ServletContextListener{
Scheduler scheduler = null;
public MyContextListener(){
scheduler = new Scheduler();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
scheduler.stop();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
scheduler.start();
}
}
.. und mein Scheduler.java
public class Scheduler {
private final ScheduledExecutorService fScheduler;
public Scheduler() {
fScheduler = Executors.newScheduledThreadPool(1);
}
public void start(){
fScheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
//Perform some task
}
}, 1, 240, TimeUnit.MINUTES);
}
public void stop(){
fScheduler.shutdownNow();
}
}
Auch wenn ich scheduler.stop();
Aufruf, wenn Sie den Server herunterzufahren, seine immer noch da Berichterstattung ein Speicherverlust sein könnte.
Diese App ist auf jelastic.com im Einsatz und ich finde, dass es nach dem Start gut läuft für etwa zwei Tage und dann scheinen die Aufgaben nicht ausgeführt werden. Es gibt keine Ausnahmen oder Fehler in den Protokollen.
Mache ich hier etwas falsch? Gibt es wirklich ein mögliches Speicherleck?
hmm .. ich dachte, es in seltenen Fällen sein kann. Meine Aufgabe alle 240 Minuten läuft und sollte nicht länger als ein paar Minuten zu beenden. Wenn bei der 300. min versuche ich zum Herunterfahren, wenn meine Aufgabe läuft nicht, sollte es nicht in der Lage sein, ordnungsgemäß herunterzufahren? Ihre Antwort ist höchstwahrscheinlich richtig, aber ich bin nur neugierig :) – Krishnaraj
@Krishnaraj Sind Sie sicher, dass Ihre Aufgabe so schnell beendet wird, wie Sie es für richtig halten? Sie möchten möglicherweise protokollieren, wenn Ihre Aufgabe gestartet/gestoppt wird, um zu überprüfen, ob sie blockiert wird. –
@ increment1 Ja, meine Aufgaben sind in nicht mehr als 5 Minuten abgeschlossen. – Krishnaraj