My Tomcat 7 donosi, że może być przeciek pamięci w moim webappJava webapp wyciek pamięci podczas korzystania 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.
Mam długie zadanie działa w moim webapp, który pobiera zainicjowany gdy webapp jest uruchomiona.
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();
}
}
.. i moja 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();
}
}
Chociaż nazywając scheduler.stop();
podczas zamykania serwera, jego wciąż zgłoszenie nie może być wyciek pamięci.
Ta aplikacja jest wdrożona na stronie jelastic.com i stwierdzam, że po uruchomieniu działa dobrze przez około dwa dni, a następnie zadania nie wydają się działać. Nie ma wyjątków ani błędów w dziennikach.
Czy robię coś złego tutaj? Czy naprawdę istnieje potencjalny wyciek pamięci?
hmm .. Myślałem, że może być w rzadkich przypadkach. moim zadaniem kursuje co 240 minut i nie powinno trwać dłużej niż kilka minut, aby zakończyć. Jeśli w 300. min próbie wyłączenia, kiedy moje zadanie nie działa, czy nie powinien być w stanie poprawnie zamknąć? Odpowiedź jest najprawdopodobniej słuszna, ale jestem po prostu ciekawa :) – Krishnaraj
@Krishnaraj Czy jesteś pewien, że twoje zadanie kończy się tak szybko, jak myślisz, że powinno? Możesz chcieć zalogować się, kiedy twoje zadanie się uruchamia/zatrzymuje, aby sprawdzić, czy nie jest blokowane. –
@ increment1 Tak, moje zadania kończą się w nie więcej niż 5 minutach. – Krishnaraj