unzuverlässiges internet + datenupdate = hänger

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: unzuverlässiges internet + datenupdate = hänger

Re: unzuverlässiges internet + datenupdate = hänger

von ds10 » 24 Okt 2013, 15:39

Ich habe das jetzt einfach mal entsprechend geändert, mit 5 Sekunden Wartezeit und AtomicInteger.

Re: unzuverlässiges internet + datenupdate = hänger

von v6ph1 » 24 Okt 2013, 13:26

Eine weitere Möglichkeit gibt es noch:
mActiveThreadCount nutzt zwar nur ++ bzw. --, aber auch das ist nicht atomic.
Parallelität führt dann zu merkwürdigen Zuständen.

Wenn diese Variable dann !=0, dann wird trotz Interrupt weiter gewartet.
Dafür gibt es u.a. einen AtomicInteger.

@uzi:
Da spielen sehr viele Punkte rein - zumal für die o.g. Variable nur die Unterbrechung während des Increment/Decrement relevant ist.
Hintergrundlast, Taktfrequenzen und die Latenzen der Speicher sind da schon sehr Systemspezifisch.
Das ist aber schon eher ein Fall für die Chaostheorie.

@ds10:
Ich würde 2 Maßnahmen kombinieren:
1. mActiveThreadCount immer mit synchronized kapseln oder AtomicInteger nutzen
2. Wartezeit auf 1s runtersetzen.

-- v6ph1

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 24 Okt 2013, 11:41

wenn das denn wirklich das problem ist... so ganz sicher bin ich mir bei so nebenläufigkeitsgeschichten ja nie. komisch auch, dass anscheinend nur ich das problem habe. und das hauptsächlich auf einem meiner rechner.

Re: unzuverlässiges internet + datenupdate = hänger

von ds10 » 24 Okt 2013, 11:33

Naja, wenn man sich die Historie des DownloadManagers ansiehst, dann wird man feststellen, dass der schon praktisch seit Beginn von TV-Browser nur ganz wenigen Änderungen unterlag. Und wenn etwas grundsätzlich funktioniert (also nur in Ausnahmefällen mal nicht) dann ändert man ja auch nichts. An anderen Stellen wird ja schon ein ThreadPool verwendet.

Bevor ich da jetzt große Änderungen vornehme, die wieder andere Probleme produzieren könnten, ist es das Einfachste die Wartezeit in den Sekundenbereich zu verlegen, dann wartet TV-Browser auch nicht ewig.

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 24 Okt 2013, 09:48

hab gerade mal ein paar min in den sourcen rumgekramt und ich bin ehrlich gesagt nicht sicher, ob DownloadManager.runDownload wirklich threadsafe ist. ich denke, es könnte hier durchaus passieren, dass der thread unterbrochen wird, wenn er gar nicht schläft. das wäre ansich kein problem, aber wenn das in einem ungünstigen moment passiert, nämlich direkt bevor der thread sich wieder für ewigkeiten schlafen legt, hat man evtl genau den von mir beobachteten zustand. nämlich dann, wenn das beim letzten aktiven dl passiert. dann kommt keine interruptedException mehr und der dl-thread schläft für 2^63 millisekunden. ich spare mir jetzt mal auszurechnen, wie viele jahre das sind :D.

vielleicht benutzt man besser thread.join? scheint mir sicherer...

[edit] http://stackoverflow.com/questions/7502 ... ng-threads <- auch ne schöne lösung für das problem mit nem thread pool, die möglicherweise auch gleich zu weniger code im tvb führt. immer ne gute idee das rad nicht neu zu erfinden.

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 24 Okt 2013, 08:43

office scan und nein, darauf habe ich keinen einfluss.

Re: unzuverlässiges internet + datenupdate = hänger

von niroschlosser » 24 Okt 2013, 08:28

Moin uzi, frage an Dich. welchen virenscanner verwendest Du?

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 24 Okt 2013, 07:35

glück gehabt, hab heut schon wieder den zustand. in der konsole ist auch nicht mehr zu sehen, als im log. das hilft also nicht weiter. thread dump:

Code: Alles auswählen

Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode):

"Thread-11" prio=2 tid=0x000000000e5f2800 nid=0x126c waiting on condition [0x000000000ec1f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.extras.reminderplugin.ReminderPlugin$3$1.run(ReminderPlugin.java:206)

"TV data update" prio=2 tid=0x000000000e5f6000 nid=0xf20 waiting on condition [0x000000000dfef000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at util.io.DownloadManager.runDownload(DownloadManager.java:94)
        at tvbrowserdataservice.TvBrowserDataService.updateTvData(TvBrowserDataService.java:289)
        at tvbrowser.core.tvdataservice.DefaultTvDataServiceProxy.updateTvData(DefaultTvDataServiceProxy.java:98)
        at tvbrowser.core.TvDataUpdater.downloadTvData(TvDataUpdater.java:257)
        at tvbrowser.ui.mainframe.MainFrame$38.run(MainFrame.java:2307)

"Store settings periodically" prio=2 tid=0x000000000e5f3000 nid=0x15dc waiting on condition [0x000000000213f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.TVBrowser$3.run(TVBrowser.java:724)

"TimerQueue" daemon prio=6 tid=0x000000000eaed800 nid=0x17b0 waiting on condition [0x00000000107ce000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000784f1c308> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
        at java.util.concurrent.DelayQueue.take(Unknown Source)
        at javax.swing.TimerQueue.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"DestroyJavaVM" prio=6 tid=0x00000000002fb000 nid=0x684 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"pool-1-thread-4" prio=6 tid=0x000000000f0cd000 nid=0x165c waiting on condition [0x000000001053e000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-3" prio=6 tid=0x000000000f0cc000 nid=0x1354 waiting on condition [0x00000000103de000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-2" prio=6 tid=0x000000000f0c8000 nid=0x1648 waiting on condition [0x000000000ee9f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-1" prio=6 tid=0x000000000f0c7000 nid=0x8d0 waiting on condition [0x000000001019f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-EventQueue-0" prio=6 tid=0x000000000b6cf000 nid=0x17c8 in Object.wait() [0x000000000f00b000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007ddf582d0> (a tvbrowser.ui.mainframe.MainFrame$38)
        at java.lang.Thread.join(Unknown Source)
        - locked <0x00000007ddf582d0> (a tvbrowser.ui.mainframe.MainFrame$38)
        at java.lang.Thread.join(Unknown Source)
        at tvbrowser.ui.mainframe.MainFrame$27.run(MainFrame.java:1513)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at util.ui.textcomponentpopup.TextComponentPopupEventQueue.dispatchEvent(TextComponentPopupEventQueue.java:55)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.WaitDispatchSupport$2.run(Unknown Source)
        at java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(Unknown Source)
        at java.awt.Dialog.show(Unknown Source)
        at java.awt.Component.show(Unknown Source)
        at java.awt.Component.setVisible(Unknown Source)
        at java.awt.Window.setVisible(Unknown Source)
        at java.awt.Dialog.setVisible(Unknown Source)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1524)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1490)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1486)
        at tvbrowser.ui.tray.SystemTray$6.windowClosing(SystemTray.java:222)
        at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
        at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
        at java.awt.Window.processWindowEvent(Unknown Source)
        at javax.swing.JFrame.processWindowEvent(Unknown Source)
        at java.awt.Window.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at util.ui.textcomponentpopup.TextComponentPopupEventQueue.dispatchEvent(TextComponentPopupEventQueue.java:55)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

"AWT-Windows" daemon prio=6 tid=0x000000000b709000 nid=0x112c runnable [0x000000000d2cf000]
   java.lang.Thread.State: RUNNABLE
        at sun.awt.windows.WToolkit.eventLoop(Native Method)
        at sun.awt.windows.WToolkit.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-Shutdown" prio=6 tid=0x000000000b8c6000 nid=0x14ac in Object.wait() [0x000000000d0ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784de1010> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:503)
        at sun.awt.AWTAutoShutdown.run(Unknown Source)
        - locked <0x0000000784de1010> (a java.lang.Object)
        at java.lang.Thread.run(Unknown Source)

"Java2D Disposer" daemon prio=10 tid=0x000000000b736800 nid=0x4f8 in Object.wait() [0x000000000cf9f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784d0ea98> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x0000000784d0ea98> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at sun.java2d.Disposer.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"Service Thread" daemon prio=6 tid=0x000000000b5f8000 nid=0x14e8 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x000000000b5ef800 nid=0x14f8 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x000000000b5db000 nid=0xb04 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x000000000b5da000 nid=0x1374 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x000000000b5d2800 nid=0x15b0 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x00000000024fb000 nid=0x1718 in Object.wait() [0x000000000c29f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784f1d468> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x0000000784f1d468> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" daemon prio=10 tid=0x00000000024f3800 nid=0x1594 in Object.wait() [0x000000000c41f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784f50ed0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:503)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
        - locked <0x0000000784f50ed0> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x00000000024f0800 nid=0x13b8 runnable

"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000002309000 nid=0x6b0 runnable

"GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000230a800 nid=0x1694 runnable

"GC task thread#2 (ParallelGC)" prio=6 tid=0x000000000230c800 nid=0x1540 runnable

"GC task thread#3 (ParallelGC)" prio=6 tid=0x000000000230e000 nid=0x1474 runnable

"VM Periodic Task Thread" prio=10 tid=0x000000000b602800 nid=0x1674 waiting on condition

JNI global references: 2996

Heap
 PSYoungGen      total 164352K, used 17966K [0x00000007d5f00000, 0x00000007e9c00000, 0x0000000800000000)
  eden space 131072K, 1% used [0x00000007d5f00000,0x00000007d617c7b0,0x00000007ddf00000)
  from space 33280K, 46% used [0x00000007ddf00000,0x00000007dee0f358,0x00000007dff80000)
  to   space 31232K, 0% used [0x00000007e7d80000,0x00000007e7d80000,0x00000007e9c00000)
 ParOldGen       total 86016K, used 50561K [0x0000000781e00000, 0x0000000787200000, 0x00000007d5f00000)
  object space 86016K, 58% used [0x0000000781e00000,0x0000000784f604e0,0x0000000787200000)
 PSPermGen       total 22528K, used 22294K [0x000000077cc00000, 0x000000077e200000, 0x0000000781e00000)
  object space 22528K, 98% used [0x000000077cc00000,0x000000077e1c5b28,0x000000077e200000)

allerdings muss ich dazu anmerken, dass ich vor dem dump schon auf 'schließen' bei tvb geklickt hatte. das ist also nicht ganz der urzustand. wie auch immer, riecht nach deadlock. alle threads sind am warten. insbesondere auch der thread "TV data update".

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 23 Okt 2013, 13:18

puh, cpu-last hatte ich jetzt natürlich nicht im blick. guck ich, wenn es das nächste mal auftaucht. und nein, das war das vollständige log nachdem der tvb ca ne halbe stunde oder so hing. bzw hängt er ja nicht wirklich. das datenupdate hängt, aber man kann ganz normal arbeiten. nur beenden kann man ihn nicht.

Re: unzuverlässiges internet + datenupdate = hänger

von ds10 » 23 Okt 2013, 11:33

v6ph1 hat geschrieben:PS: Kann man das vllt. mit ziehen des Netzwerkkabels simulieren?
Das hatte ich schon versucht, hat bei mir aber nicht zum Hängenbleiben geführt.

Re: unzuverlässiges internet + datenupdate = hänger

von v6ph1 » 23 Okt 2013, 10:46

Da kommt nix weiter im Log?

Die nächste Meldung müsste "Loading {URL}" sein und die kommt vor(!) dem eigentlichen Download.
(siehe tvbrowser.util.io.DownloadManager.downloadThreadRun() )

Konsole + Threaddump wäre sehr hilfreich.

Eine kurze Frage noch:
Wie sieht die CPU-Last beim Hängenbleiben aus?

-- v6ph1

PS: Kann man das vllt. mit ziehen des Netzwerkkabels simulieren?

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 23 Okt 2013, 08:01

so, ist mal wieder aufgetreten. wie versprochen, anbei das log. gibt nicht allzuviel her, aber vielleicht hilft es ja. wenn nicht, muss ich den tvb ab jetzt immer von der konsole aus starten und auf den nächsten hänger warten. aber dann kann ich zumindest einen thread dump machen und die ausgaben auf der konsole hätte ich auch.
Dateianhänge
tvbrowser.log
(81.76 KiB) 243-mal heruntergeladen

Re: unzuverlässiges internet + datenupdate = hänger

von Agrivaine » 31 Aug 2013, 10:31

Ja, indem du ihn per cmd/bash aufrufst:

Code: Alles auswählen

java -Dpropertiesfile=windows.properties -jar tvbrowser.jar > log.txt 2>&1
Damit landen die Ausgaben im aktuellen Verzeichnis in der Datei log.txt. TVB funktioniert aber sonst wie gehabt. "2" ist stderr (hier landen eigentlich die Fehlerausgaben) und wird mittels ">&1" auf die Standardausgabe "1" (stdout) umgeleitet, wobei aber bereits "1" in die Datei log.txt umgeleitet wurde = alle Ausgaben (Standard + Fehler) landen in der Textdatei.

Re: unzuverlässiges internet + datenupdate = hänger

von uzi » 31 Aug 2013, 08:39

gibt es eine bequeme möglichkeit, die konsole in eine datei umzuleiten? (ansonsten verbesserungsvorschlag: bei allen gespawnten threads in run() einen try-catch-block für alles setzen, der eine exception wenigstens noch ins log schreibt, bevor er abschmiert ;).)

Re: unzuverlässiges internet + datenupdate = hänger

von ds10 » 31 Aug 2013, 02:11

Leider ja nicht, wenn eine Exception in einem anderen Thread auftritt stehen die oft nur auf der Konsole, manche sieht man sogar gar nicht, wenn man keine try{ }catch(Throwable t){t.printStackTrace();}-Anweisung an der richtigen Stelle platziert hat.

Nach oben