Speicherverbrauch steigt mit der Zeit

  • Nur pmap zeigt was an, was ich aber nicht auswerten kann

    So direkt ich auch nicht.

    Im Vergleich könnte man vielleicht was sehen.


    Also nach ~30min und dann alle 2 Stunden.

    Dazu dann am besten nach Beschreibung sortieren und dann vergleichen, wo sich was ändert.

    Irgendwo muss sich das, was man an Zuwachs von aussen mit "top" sieht, ja zeigen.


    Wenn du Glück hast, steht bei den Punkten was sinnvolles in der Beschreibung.

    Bei diesen "anon" Blöcken muss man aber wohl mit einem anderen Tool ran. Das erwähnte libleak könnte da was bringen, wenn die Beschreibung stimmt.

    Gruss
    SHF


  • Wenn du einen Test mit libleak machst, dann poste mal die Ausgabe.


    Wenn ich das Prinzip richtig verstehe, dann loggt libleak die malloc and free. Und da C++ auch nur oben auf die glibc aufsetzt resultiert ein "new" sicher auch irgendwie in einem "malloc".


    Wäre praktisch wenn das jemand testen könnte der bereits einen VDR dauerhaft laufen hat. Wenn sich hier niemand findet, dann würde ich halt mal meinen HTPC eine Weile durchlaufen lassen.

  • Hier mal nach 20 Minuten ein Log mit weit über 100MB. Habs gepackt nach Dropbox 5,9MB:

    https://www.dropbox.com/s/yjmryqp7x54fusw/leak_0.tar.xz?dl=0

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)

    „In zwei Jahren wird das Spam-Problem gelöst sein.“ [Bill Gates], Microsoft-Chef, 2004

  • Ein pmapvergleich alle Stunde kommt auch noch wenn ich was habe. leak dann auch gepackt. Ich kann damit aber nichts anfangen

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)

    „In zwei Jahren wird das Spam-Problem gelöst sein.“ [Bill Gates], Microsoft-Chef, 2004

  • Ich hab mal drauf geschaut aber mir sagt das nichts. Ist vielleicht der "threshold" zu niedrig und VDR hält Speicherblöcke einfach länger?


    Aber selbst wenn: Ich vermisse eine klare Ansage wie "possible memory leak". So wie das Log aussieht müsste man es erst mit zusätzlichen Tools irgendwie auswerten.


    Dazu kommt das du echt viele Plugins geladen hast.


    Um das Leak im VDR selbst zu finden müsste ich vielleicht doch einmal meine Kiste länger laufen lassen. Ich hab da kaum Plugins drauf. Allerdings müsste man dann erstmal ein Tool finden das taugt. Bisher war ich von allem zum Thema enttäuscht. Valgrind bringt auch kaum was. Dazu kommt das Valgrind jedes Programm das komplexer als "Hello World" ist so stark langsamer macht das es unbenutzbar wird.


    Edit: https://github.com/WuBingzheng/libleak/issues/13

  • Ich habe den VDR mal beendet. Dann erscheint in dem Log am Ende ein "may leak"

    Das Archiv ist in der Dropbox:

    https://www.dropbox.com/s/yjmryqp7x54fusw/leak_0.tar.xz?dl=0


    Zusätzlich der pmap-vergleich:

    https://www.dropbox.com/s/ypyc…20-06-08_1430.tar.xz?dl=0


    pmap.30m ist nach 30 Minuten unddann alle Stunde pmap.xh

    Die diffs sind jeweils vom ersten pmap.30m zum aktuellen pmap.xh und zusätzlich zwischen den letzten beiden pmap.xh

    die pmap-dateien sind dabei

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)

    „In zwei Jahren wird das Spam-Problem gelöst sein.“ [Bill Gates], Microsoft-Chef, 2004

  • Ist vielleicht der "threshold" zu niedrig und VDR hält Speicherblöcke einfach länger?

    Denke ich auch, da der Mainloop nur alle Sekunde läuft muss man den "threshold" mindestens mal auf 2 Sekunden stellen.

    Da es sich um langfristige Lecks handelt, wird mehr sicher auch nicht schaden, denke ich.


    Durch den EPG wird es aber trotzdem noch falsch positive Meldungen geben. Eventuell noch durch andere Sachen.


    Generell wird man die ersten paar Minuten nach dem Start sowieso verwerfen können und das, was beim Beenden entsteht auch.


    Ich würde es mal mit "tail -f" auf der Datei versuchen. Bei den Meldungen, die nach einer Weile Betrieb rein kommen, müssten die Interessanten dabei sein.



    Wäre praktisch wenn das jemand testen könnte der bereits einen VDR dauerhaft laufen hat. Wenn sich hier niemand findet, dann würde ich halt mal meinen HTPC eine Weile durchlaufen lassen.

    Wegen des EPG wird es mit einem Produktiv-System nicht so einfach.

    Ich hatte schon überlegt ein Testsystem, mit dummi Input, aufzusetzen und den Mainloop drastisch zu beschleunigen.

    Da erinnere ich aber nicht mehr, ob der Fehler unter den Bedingungen auftrat. Irgendwas in der Art, abgeschaltetes EPG oder so, wurde schon mal versucht.


    "pmap" schaue ich mir heute Abend an, wenn ich dafür noch Zeit finde.

    Gruss
    SHF


  • Was den Speicherverbrauch erhöht ist ja allgemein noch im dunklen. Ich habe z.B. ein System ganz ohne Ausgabe. Reines VDR-Backend. Ich werde den morgen bevor ich arbeiten gehe einfach mal booten und einen Sat-Radio-Sender laufen lassen. Dann vergleiche ich mal Speicherverbrauch vorher und nachher. Einfach aus Interesse ob der Speicherverbrauch bei einem System ohne Ausgabe auch stetig steigt.

  • So, ich hab doch mal schnell einen Blick drauf geworfen.


    Wenn ich das richtig interpretiere, werden von den [ anon ] markierten Blöcken werden einige grösser.

    Wirklich weiter hilft das aber nicht.


    Dann tut sich was bei ISO8859-5.so und DroidSans.ttf.

    AFAIK verwendet der VDR den Schriftsatz doch gar nicht?

    Ich würde daher auf ein Skin-Problem tippen. -> Mal mit default Skin und ohne Skindesigner-Plugin versuchen.


    Dann erscheint in dem Log am Ende ein "may leak"

    Ein "may leak"? Ich schätze eher sowas um die 10.000 ;D.


    Ich habe versucht, ob man da da grössere Blöcke ausmachen kann, aber bei der Menge sieht man den Wald vor Bäumen nicht.

    Das müsste man mal mit einem grösseren "threshold" versuchen. Evtl sogar deutlich grösser, 10 Minuten oder so. Da muss man wohl etwas rum probieren.

    Gruss
    SHF


  • Ich habe das mit autotreshold gestartet. Am Ende lag der bei 9000 oder so...

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)

    „In zwei Jahren wird das Spam-Problem gelöst sein.“ [Bill Gates], Microsoft-Chef, 2004

  • Was den Speicherverbrauch erhöht ist ja allgemein noch im dunklen. Ich habe z.B. ein System ganz ohne Ausgabe.

    Ohne Ausgabe tritt es auf, das scheint sicher.

    Die Frage ist, ob es auch ohne DVB-Input passiert.


    Das EPG produziert halt extremes Rauschen, da wäre es hilfreich, das los zu sein.

    Gruss
    SHF


  • Ich habe EPG-Scan schonmal aus. Trotzdem würde natürlich der eine Transponder den ich tunen würde EPG produzieren.


    Ich gehe mal davon aus, dass einfach Sat-Kabel abziehen keine Lösung wäre weil der VDR dann in "Emergency-Exit" geht?

  • Ich gehe mal davon aus, dass einfach Sat-Kabel abziehen keine Lösung wäre weil der VDR dann in "Emergency-Exit" geht?

    AFAIK macht der VDR das nur, wenn eine Aufnahme läuft.

    Wegen möglicher Nebenwirkungen des Sat-Kabel abziehens bin ich aber auch nicht sicher.

    Gruss
    SHF


  • Man könnte testweise auch einzelne oder alle SectionFilter deaktivieren (der EitFilter z.B. liest die EPG-Daten ein), dann noch EPG-Update und UpdateChannels auf 0 setzen und als einziges Plugin z.B. das Dummydevice als Ausgabedevice verwenden.

    Helmut

  • Das noepg-plugin wäre auch noch eine Möglichkeit.

    Aktuell hab ich aber eh keine DVB-Karte in diesem Rechner.


    Als erstes wollte ich den VDR überhaupt mal mit dem dummydevice-plugin zum laufen bringen.

    Aktuell scheitert es mit der Fehlermeldung:

    vdr: malloc.c:3760: _int_malloc: Assertion `(unsigned long) (size) >= (unsigned long) (nb)' failed.

    Make lief problemlos durch.

    Kann es sein dass das dummydevice-plugin nicht mehr mit vdr 2.4.1 läuft?

    Gruss
    SHF


  • Es gibt zwei Gründe für steigendes Speichervolumen:


    - Ein Leak, weil ein Pointer "vergessen" wird, ohne ihn freizugeben.

    - Eine Datenstruktur, die immer mehr Daten sammelt und größer wird, aber kein Leak im klassischen Sinne ist, weil immer noch ein Pointer irgendwo aktiv ist und jeder Block noch bekannt ist. Das werdet ihr mit sowas wie Valgrind und Konsorten nicht finden. Da hilft nur regelmäßiges protokollieren.


    Kandidaten für den zweiten Fall sind Listen usw. der Events, Schedules, Recordings, Channels...

  • Ich kenne tools, die sowas finden können. Wenn es gut werden soll aber mit etwas Arbeit verbunden, da man allocatoren manipulieren muss, etc.. Außerdem ist mein Blick etwas Windows-fixiert, bedingt durch meinen Kundenkreis.

    ich habe vor langer Zeit mit einer Lib gearbeitet, die man dazu linkt, der Name war irgendwas mit e-fence oder electrical fence oder ähnlich. Auch duma ist etwas ähnliches. Dann gibt es den Dr.memory, der hängt sich an einen Prozess wie ein Debugger und beobachtet das Verhalten und zeigt Fehler in der Speicherverwaltung.

    Reelbox Avantgarde II, 2GB, Turion X2 (TL-66), Kingston SSD (64GB)
    BM2LTS 2.95.1 RC10

    Raspi 3, Libreelec 9.2.6

    QNAP TS 412

    DigibitR1

    Zyxel GS1900-24E

    Supermicro X11-SCL-IF, Xeon E2176, 32GB, 500GM SSD, 8TB HDD, Ubuntu 20.10, TVHeadend 4.3

  • Könnte ich damit:
    https://github.com/google/sanitizers/wiki/AddressSanitizer

    Den kompletten VDR mit Plugins neu bauen lassen und analysieren?

    Als absoluter Laie meine ich?


    Und wo müsste man die Option einbauen? make.config vom VDR?

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)

    „In zwei Jahren wird das Spam-Problem gelöst sein.“ [Bill Gates], Microsoft-Chef, 2004

  • Doch, es läuft bei mir unter Gentoo x64 und vdr-2.4.1 ohne Probleme. Die Quelle kommt von hier: vdr-dummydevice-2.0.0.

    Von da hab ich es auch.

    Ohne dummydevice geht es aber auch nicht, da beendet der VDR wegen fehlendem Ausgabedevice.

    Mehr als die o.g. Fehlermeldung kommt auch nicht. Leider sagt mir die gar nichts.


    - Ein Leak, weil ein Pointer "vergessen" wird, ohne ihn freizugeben.

    - Eine Datenstruktur, die immer mehr Daten sammelt und größer wird, [...]
    Kandidaten für den zweiten Fall sind Listen usw. der Events, Schedules, Recordings, Channels...

    Den ersten Fall müsste libleak doch abdecken?

    Zumindest wenn malloc() ... für die Speicherbereiche verwendet wird.


    Bei Events, Schedules ... hatte ich schon überlegt einen Zähler einzubauen, der die Elemente mit zählt.


    e-fence

    Stimmt, das hauch schon mal gehört.

    Erstmal muss ich den VDR hier aber überhaupt mal zum laufen bringen.



    Den kompletten VDR mit Plugins neu bauen lassen und analysieren?

    Ich würde es erst mal auf das Plugin eingrenzen.

    Als erstes mal nur mit den nötigen Plugins zur Ein und Ausgabe versuchen. Dann nach und nach die Anderen.


    Wenn du das Plugin hast, wirst du die Lösung wahrscheinlich auch bald haben.

    Bei skindesigner und softhddevice gab es immer mal wieder Probleme mit einigen Versionen der verwendeten Bibliotheken (ffmpeg zB.). Ich schätze, dass es da hängen wird.

    Gruss
    SHF