2012-07-05 13 views
5

Moja sytuacja wygląda następująco:Wyłączenie Tomcat Bardzo wolno po wywołaniu shutdown.sh?

Za każdym razem, przed załadowaniem pliku wojny do folderu aplikacji internetowej, zatrzymuję Tomcat, dzwoniąc pod numer sh shutdown.sh. Zwykle około 30 sekund wymagało całkowitego wyłączenia. Ale teraz to już nie działa dobrze.

Właściwie to zadziałało, ponieważ kiedy uzyskuję dostęp do aplikacji ze strony internetowej, generuje błąd 503 (w ramach konserwacji). Ale kiedy sprawdzam, czy jest to ps aux | grep tomcat, proces tomcat nadal istnieje. I będzie tam przez około 5 - 10 minut.

Rozumiem, że może zająć dodatkowe czasy, aby ukończyć wszystkie zadania, ale jest zbyt wolny (5 - 10 minut), zanim całkowicie się zatrzyma. Nie rozumiem, dlaczego tak się dzieje, ale musi być jakiś powód. Może ma to coś wspólnego z kodem lub nowym skryptem wdrożenia, którego używaliśmy ostatnio. Po prostu prawie nie mam pojęcia, gdzie sprawdzić.

Jest to ważne dla naszego zespołu, ponieważ używamy "automatycznego wdrażania", w którym używamy skryptu do automatycznego pakowania pliku wojny, przesyłania i wdrażania w określonym czasie. Gdybyśmy rozpoczęli nową instancję tomcat przed starą, która się z powodzeniem zakończy, zostanie ona zawieszona na wieczność, a zadanie czyszczenia przez "kill -9" jest zniechęcające.

Czy jest ktoś, kto eksperymentował z tym problemem? Każda wskazówka byłaby doceniona.

+1

Q: Więc co jest ostatnią rzeczą w dzienniku, kiedy to biorąc to 5-10 minut? RÓWNIEŻ: czy "ps -eaf" daje ci jakieś wskazówki (czy widzisz proces Java z zerowym wykorzystaniem procesora)? Jaka jest twoja wersja Tomcat? Twój system operacyjny? RÓWNIEŻ: jeśli identyfikujesz proces "java" "zawieszając" w "ps", powinieneś otrzymać ślad stosu: http://wiki.apache.org/tomcat/HowTo#How_do_I_obtain_a_thread_dump_of_my_running_webapp_.3F – paulsm4

+0

@ paulsm4: Patrząc na log Widzę, że nawet po wywołaniu shutdown.sh, moje zadania Quartz nadal działają. Po chwili pojawia się błąd: SEVERE: Wydaje się, że aplikacja internetowa [/ project] uruchomiła wątek o nazwie [Resource Destroyer in BasicResourcePool.close()], ale nie udało się go zatrzymać. Jest bardzo prawdopodobne, że spowoduje to wyciek pamięci. –

+0

@ paulsm4: przy okazji, mam zadanie kwarcu uruchamiane przez około 10 sekund. Czy to może być problem? –

Odpowiedz

2

Hoang Long -

Dziękujemy za aktualizację.

1) Fakt, że widzisz swoimi pracy kwarcowe działa, a komunikat o błędzie, są istotne:

ciężkie: Aplikacja internetowa [/ projekt] Wydaje się, że rozpoczęła wątek o nazwie [resource Destroyer w BasicResourcePool.close()], ale nie udało się zatrzymać go . Jest bardzo prawdopodobne, że spowoduje to wyciek pamięci.

2) Jedna propozycja jest konfiguracja:

http://forum.springsource.org/showthread.php?17833-Spring-Quartz-Tomcat-no-shutdown

że ten sam problem. Naprawiłem to, dodając destroy-method="destroy" do definicji SchedulerFactoryBean. W ten sposób sprężyna zamyka program planujący po zatrzymaniu aplikacji.

3) Kolejna propozycja jest dodanie słuchacza zamykania:

http://forums.terracotta.org/forums/posts/list/15/4341.page

Korzystanie słuchacza kontekstowe i wprowadzając limit czasu na zamknięcie rozwiązuje kwestia dla mnie. Ja po prostu poczekać chwilę po wyłączeniu:

public void contextDestroyed(ServletContextEvent sce) { 
    try { 
     factory.getScheduler().shutdown(); 
     Thread.sleep(1000); 
+0

Myślę, że zrozumiałem: głównym powodem jest to, że wciąż mam działające kwarcowe zlecenia transakcyjne. O trzeciej metody twojej odpowiedzi, masz na myśli, że muszę zastąpić Spring "ContextLoaderListener" dla tego zadania? –

Powiązane problemy