Speicherleck möglich in dbttcd?

  • Hallo,


    neulich hat meine dm800se (v1) alle paar Sekunden Zahnräder gezeigt. Das Kommando top zeigte einen ungewöhnlich hohen Speicherverbrauch des "Dreambox Teletext Cache Daemon" dbttcd:

    Code
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P SWAP   TIME CODE DATA nFLT nDRT COMMAND
      552 root      20   0  123m  42m  252 S    0 32.0  14:23.21 1  81m  14:23   28 103m 244k    0 dbttcd
      588 root      20   0  231m  46m 2788 S    1 34.9 220:09.74 1 185m 220:09 1984 141m 133k    0 enigma2
    14704 root      20   0  2644 1108  884 R    2  0.8   0:02.36 0 1536   0:02   76  572    1    0 top

    Auch heute habe ich den dbttcd abgeschossen (noch ohne Zahnräder), bei Werten von VIRT und RES (KB):

    Code
    552 root      20   0 73856  36m  808 S    1 27.6  19:17.21 dbttcd


    Normal sind wohl eher Werte wie:

    Code
    557 root      20   0 45720 9108 1060 S    1  6.7   0:42.93 dbttcd
      557 root      20   0 48228  11m 1060 S    2  8.6   0:52.18 dbttcd
      557 root      20   0 50996  14m 1060 S    2 10.7   1:25.71 dbttcd


    die passen,bis auf den hohen Zeitverbrauch in Spalte TIME+, zu anderen in diesem Forum gezeigten Werten. Könnte es sein, dass der dbttcd langsam den Speicher volllaufen lässt? :confused_face:


    Naiv würde ich statt dessen erwarten, dass nach einiger Zeit der gesamte Teletext (eines Senders? aller Sender?) im Cache steht und damit dem Wachstum eine Obergrenze gesetzt ist.


    dm800se v1, OE 2.0 2015-12-05 mit Updates 12-31, EPGRefresh, Auto3D und SqueezeOut 1.6
    Im Log (dmesg) sehe ich nichts auffälliges.

  • Ist (mir) schon länger bekannt. Gibt ein ein paar Threats im IHAD und NN² Forum dazu.


    Bei meiner DM7020HD von USB gebootet und 1GB Swappartition auf USB tritt der leak nie auf, obwohl ich den Teletext auf der Box sehr oft nutze. CPU Auslastung 0%, MEM 1-3,5%


    Es gibt zwei workarounds:


    wenn die Box extrem träge wird und Enigma2 noch ansprechbar ist:
    TELETEXT starten
    mit MENU in die Einstellungen
    "Puffern im Hintergrund" -> deaktivieren
    TELETEXT schließen
    TELETEXT wieder starten und "Puffern im Hintergrund" wieder aktivieren, dann läuft es wieder eine Weile.


    Wenn die GUI nicht mehr reagiert, per Telnet:

    Code
    killall -9 dbttcd


    dbttcd läuft dann zwar wieder, weil vom wdog neu gestartet, aber bis zum nächsten Enigma2 Neustart hat man kein Teletext mehr (black screen) ...

    Code
    /etc/init.d/dbttcd restart


    funktioniert auch nicht korrekt, solange man Enigma2 nicht neu startet, hat man auch kein TELETEXT mehr, aber die CPU/MEM Auslastung geht wie beim killall -9 dbttcd wieder runter


    Wenn man das "Puffern im Hintergrund" in den Teletext Einstellungen dauerhaft deaktivert, tritt der Leak nicht mehr auf. Allerdings hat man ein Teletext wie im OE1.6: jede Seite wird immer neu geladen


    Ich habe hier eine DM7020HD und zwei DM800SE mit jeweils 1GB aktiver Swap Partiton auf USB - auf allen drei Boxen ist wg. dem Dreambox Teletext cache daemon E2 noch nie eingefroren und die CPU und MEM Auslastung liegt bei 0% und 1-3.5%. Aber es gibt genügend Berichte, vor allem über Boxen mit 256MB RAM, wo das recht häufig auftritt, also mit extrem hoher dbttcd CPU und MEM Auslastung bis zur E2 Unbedienbarkeit.


    Ich tippe auch auf einen MEM leak, wobei ich dachte, dass DMM Bescheid weiß ...

    Gruß Fred

    Die Dreambox ist tot, es lebe die Dreambox

    5 Mal editiert, zuletzt von Fred Bogus Trumper ()

  • Vielen Dank für die ausführliche Beschreibung. Ich vermute, dbttcd gehört zum closed source Teil von DMM oder steckt der irgendwo in git?


    Wenn man das "Puffern im Hintergrund" in den Teletext Einstellungen dauerhaft deaktivert, tritt der Leak nicht mehr auf. Allerdings hat man ein Teletext wie im OE1.6: jede Seite wird immer neu geladen


    Dann wäre ja ein Zwischending in Python machbar: beim Eintritt in den Teletext-Modus die Kommandos zum Aktivieren schicken, und beim Hinausgehen (oder Standby) Deaktivieren. Der erste Seitenaufbau wäre lahm, aber der Cache wird schnell gefüllt, meine ich. :winking_face_with_tongue: Ein dauerhaftes Deaktivieren kann ich meiner Frau nicht verkaufen.


    Zitat

    /etc/init.d/dbttcd restart funktioniert auch nicht korrekt, solange man Enigma2 nicht neu startet, hat man auch kein TELETEXT mehr


    Schade. Ich war schon am Überlegen, wie man den Aufruf "start-stop-deamon wdog dbttcd" ulimit hinzufügen kann, damit der Daemon bei zu viel Speicherverbrauch gekillt wird. Aber wenn Enigma2 mit dem Phönix nicht reden kann, ist das nur die halbe Miete. :pinch:

    • Offizieller Beitrag

    hmmm also mich wundert es aber dass es angeblich ja hefen soll wenn man das puffern kurz abschaltet.. dann kann es kein leak sein...


    Ein Leak wäre wenn Speicher allokiert würde, der nie freigegeben wird... und das ist ja nicht der Fall.


    Das ganze ist auch nicht wirklich nachvollziehbar.. eine Box erst x Tage laufen zu lassen, nur damit es irgendwann zu diesem Zustand kommt ist irgendwie sehr doof um sich das anzuschauen.


    Dann wäre wohl die einfachere Lösung einfach die Box nicht x Tage am Stück laufen zu lassen *duck*


    cya

  • Zitat

    dbttcd läuft dann zwar wieder, weil vom wdog neu gestartet, aber bis zum nächsten Enigma2 Neustart hat man kein Teletext mehr (black screen) ...


    Kann ich nicht bestätigen, du musst natürlich 1x umschalten damit er die PID von E2 bekommt die er filtern/cachen soll.


    Zitat

    Wenn man das "Puffern im Hintergrund" in den Teletext Einstellungen dauerhaft deaktivert, tritt der Leak nicht mehr auf.


    Tritt das Problem denn auf wenn das Caching aktiviert ist man den TText aber nicht aufruft? Also wirklich vom Cache-Thread oder nur wenn man Seiten anzeigen lässt?


    Zitat

    Ich vermute, dbttcd gehört zum closed source Teil von DMM oder steckt der irgendwo in git?


    Der ist leider closed.


    Kann es sein, dass der Effekt nur bei bestimmten Sendern auftritt? Kann mich noch dunkel erinnern das es Probleme mit dem Füttern der libzvbi gab die dann nicht mehr zurück kam. Eventuell liegt das Problem dort und nicht im dbttcd selbst...

    Ich bin nicht faul sondern im Energiesparmodus!


  • Kann ich nicht bestätigen, du musst natürlich 1x umschalten damit er die PID von E2 bekommt die er filtern/cachen soll.


    ok, das stimmt. Einen Senderwechsel hatte ich natürlich nicht versucht ...


    eventuell hilft ein daily cronjob, der 1x täglich dbttcd neu startet (crond beim bootup nicht vergessen zu aktivern, wird per default nicht automatisch gestarted :winking_face: )


    Code
    0 4 * * * /etc/init.d/dbttcd restart


    im Grunde reich auch ein

    Code
    killall -9 dbttcd


    der wdag startet den daemon automatisch wieder.


    Betroffene man können im in den Teletext Einstellungen auch debug aktivieren, dann wird nach /tmp/dbttcp.log geloggt
    wenn man das Startscript anpasst und dbttcd im debug mode startet, erhält man einen log des Daemons: /tmp/dbttcd.log


    /etc/init.d/dbttcd wie folgt anpassen:
    dbttcd stoppen
    /etc/init.d/dbttcd stop


    Zeile 9 auskommentieren und die Zeile darunter einfügen, sieht dann so aus

    Code
    #start-stop-daemon -q -p /var/run/dbttcd.pid -x /usr/bin/wdog -S -b -m -- -d dbttcd -f
        start-stop-daemon -q -p /var/run/dbttcd.pid -x /usr/bin/wdog -S -b -m -- -d dbttcd -l f -v 3 -f



    und dann wieder starten:
    /etc/init.d/dbttcd stop


    ich habe auch schon vor längerem ein Plugin gefrickelt, damit man den dbttcd restart per GUI ohne Konslole etc. ausführen kann. Aber das ist auch nur ein Workaround ...

    Gruß Fred

    Die Dreambox ist tot, es lebe die Dreambox

  • Zitat

    ok, das stimmt. Einen Senderwechsel hatte ich natürlich nicht versucht ...


    Man könnte natürlich immer auf einem bestimmten Sender restarten dessen TXT-PID man kennt und diese mit der Option "-p xxxx" beim restarten übergeben dann muss man nicht extra umschalten.


    Vielleicht kann man die auch irgendwie von E2 bekommen und als Variable setzen. Ist aber alles Mist, sollte schon sauber laufen. :frowning_face:


    Zitat

    zu den Sendern kann ich leider nichts sagen das passiert immer bei den Schwiegereltern.


    Schade, ich würde meinen Arsch verwetten das es ein bestimmter Sender ist der Zicken macht...

    Ich bin nicht faul sondern im Energiesparmodus!

  • Ich hab die 8000 mittlerweile an meine Eltern abgegeben. Daher kann ich nur sagen, welche Sender ich am häufigsten schaue: SRF1, SRF2, ARD, ZDF und Pro7.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Nun auch Ich habe mit meiner DM8000 das Problem mit dem VideoText (dbttcd) ... Ich verwende das aktuell und letzte Image (dreambox-image-dm8000-20160616.nfi). Komisch ist das die DM8000 stätig speicher verliert und mir war nicht klar wieso ... bis Ich mir mal mit top die prozesse der DM8000 angeschaut habe ... erstmal habe Ich nichts bemerkt , doch nachdem ich das einen moment beobachtet hatte , so poppte auf einmal der Prozess "dbttcd" auf ... nachdem Ich google bemüht hatte wusste Ich das dies der Prozess für den VideoText der Dreambox ist ... nun fragte Ich mich wieso der Prozess nur ab und an sichtbar ist (über top) dann wunderte Ich mich das laut top dieser Prozess 17,1% meines speichers nutzte obwohl Ich nimals den VideoText der DM8000 nutze noch genutzt habe. Ergebinss des ganzen ist dann das Ich nach einigen Tagen die Zahnräder sehe und sich die DM8000 kurz aufhängt und dann zwar wieder zurück kommt , aber da ja der Speicher meiner Box stätig zurück geht dies immer wieder passiert....


    wieso wächst "dbttcd" im Speicherverbrauch so an obwohl ich das ganze nicht nutze ?? also irgendwas mit dem Prozess ist auf jeden fall faul ... was auch immer ....

    bRAiNShEEP

  • Zitat

    wieso wächst "dbttcd" im Speicherverbrauch so an obwohl ich das ganze nicht nutze ??


    Weil du das Prinzip des Caching wohl nicht verstanden hast.


    Also wenn du eh keinen Teletext nutzt macht es Sinn das "Puffern im Hintergrund" im Teletext abzuschalten und das Problem ist gelöst.


    Ansonsten wie schon beschrieben versuchen den oder die Problem Sender ausfindig zu machen...

    Ich bin nicht faul sondern im Energiesparmodus!

  • Zitat

    Weil du das Prinzip des Caching wohl nicht verstanden hast.

    andscheinend nicht , denn ob es nun aktiviert ist oder nicht , der VideoText findet für mein Empfinden die Seiten genausoschnell mit deaktivierten als auch mit aktiviertem puffern...


    Zitat

    Ansonsten wie schon beschrieben versuchen den oder die Problem Sender ausfindig zu machen...

    hmm nunja , auf ZDF HD fährt er auf 3.0% MEM hoch , nach beenden gibt er aber nichts zurück und baut dann nachdem mann ZDF HD wieder aufruft weiter auf die 3.0% MEM auf ... wiederrum RTL HD zum Beispiel , der gibt nach dem beenden den Speicher wieder zurück.....


    Also nochmal zusammengefasst (nur VideoText gestartet und wieder beendet):


    ARD HD -> ok
    ZDF HD -> gibt nach dem beenden keinen Speicher zurück
    RTL HD -> ok
    Sat.1 HD -> ok
    Pro7 HD -> ok


    das war jetzt also mal ein schnelltest ... evtl. hilft das ja was ...

    bRAiNShEEP

    2 Mal editiert, zuletzt von bRAiNShEEP ()

  • andscheinend nicht , denn ob es nun aktiviert ist oder nicht , der VideoText findet für mein Empfinden die Seiten genausoschnell mit deaktivierten als auch mit aktiviertem puffern...


    Wohl kaum denn wenn der Cache deaktiviert ist musst du warten bis die Seite wieder gesendet wird, das kann eine halbe Minute oder länger dauern, bei Unterseiten auch noch länger.
    Mit aktiviertem Cache sind die Seiten sofort verfügbar (wenn du mal einige Minuten auf dem Sender verbracht hast).

  • wie schon erwähnt , das kann Ich bei deaktivierten Puffer nicht feststellen , egal was Ich für eine Seite aufrufe , die ist sofort da ... und wenn die noch so verborgen ist ... gut evtl. ist mit dem Puffer noch ein paar milisekunden schneller , aber für mich gesehen ist das ohne Puffer schnell genug ...

    bRAiNShEEP

  • dhwz


    hmm jetzt machst mich aber durcheinander :grinning_squinting_face:


    wenn da steht:


    Puffern im Hintergrund - aktivieren (heist das dann Puffer ist deaktiviert ???)
    Puffern im Hintergrund - deaktivieren (heisst das dann Puffer ist aktiviert ???)

    bRAiNShEEP

    Einmal editiert, zuletzt von bRAiNShEEP ()