GlassFish Timer időnként leáll

Fórumok

Sziasztok!

Van néhány időzített rutinunk a

@Schedule

-el annotálva, amik időnként látszólag ok nélkül megállnak. Mármint maga a timer áll le és később nem indul el mikor eléjön az ideje.
Pl van egy, ami minden óra 0, 15, 30, 45 perckor elindul (

@Schedule(hour = "*", minute = "*/15")

), van ami egy nap egyszer, van ami heti egyszer stb.

Vagy csak egy adott timer áll le vagy az összes. Látszólag random történik a dolog.
Olyat már tapasztaltunk, hogy kezeletlen kivétle volt, hanyattvágta magát az adott timer és a GF újra indításáig nem volt hajlandó a megadott időben elindulni.

Valaki tapasztalt már ilyet?

Hozzászólások

Tudod, hogy milyen implementáció van mögötte? Egy szál, ami várakozik ameddig valamelyik időzítő aktuálissá válik? Az időzített taszkot milyen szálon futtatja le? Az időzítőn? Külön executoron? Az executor hány szálú, be tud telni? Megannyi kérdés.

Ha nincs exception (vagy csak nincs loggolva :-P), akkor arra gyanakodnék, hogy az időzítő szál vagy a taszk végrehajtó szál(executor) beragadt egy végtelenül fútó taszkban például.

Mindenesetre az annotációs API mögötti implementációt látni kellene ahhoz, hogy kiderüljön egyáltalán milyen hibaállapotok lehetségesek, illetve hogy milyen esetleges JVM JRE bugok érinthetik.

Vannak (voltak) bugok a Java időkezelésében, régebben mi is találtunk ilyet, de már nem emlékszem a pontos körülményekre. Azt tudom, hogy workaroundoltuk, aztán később 6-os vagy 7-es környékén javították. Ez hányas Java?

Valóban, ha valami átállítja a rendszerórát, az is be tud zavarni. (Persze ez is bug.)

(Amit mi találtunk, az akkor jött elő, ha túl rövid időzítést állítottunk be, ami a beállítás eleje és vége között lejárt, elő tudott fordulni, hogy sose járt le. Ha az alkalmazás logikája olyan, hogy mindig a következőig vár a thread, akkor előfordulhat hasonló.)