Keine Coredumps vom VDR aber von allen anderen Programmen.

  • Was genau sind denn die Voraussetzungen, dass bei einem Segfault ein Coredump erzeugt wird?


    Code
    % cat /proc/sys/kernel/core_pattern 
    |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e


    Code
    % ulimit -c
    unlimited


    Wenn ich

    Code
    % sleep 200 &
    % killall -SIGSEGV sleep

    ausführe wird ein Coredump erzeugt und ich kann diesen über systemd-coredumpctl abrufen.


    Gestartet wird der VDR über runvdr-extreme. Zuerst dachte ich, dass diese den Coredump irgendwie verschluckt, aber auch wenn ich den VDR direkt von der Konsole oder über ein kleines Service-File über systemd starte funktionieren die Coredumps nicht.


    Was macht der VDR anders? Liegt es am vdr User?
    Ich weiß nicht mehr weiter.

  • Benutzt du "-u", um ihn als anderen User laufen zu haben?
    Dann muss der vdr mit dem Parameter "--userdump" gestartet werden, glaube ich.


    Lars.

  • Keine Ahnung, bei mir hat's bisher immer einfach funktioniert.
    Ist es sicher, dass "ulimit -c unlimited" in der vdr-Umgebung aktiv ist? Vielleicht mal in der runvdr eintragen?
    Gibt's sonst noch was spezielles bei systemd, was man konfigurieren müsste? Mein Wissen endet hier leider.


    Lars

  • In Theorie sammelt systemd die doch ein, oder?


    Bei yaVDR lassen wir alle coredumps in ein Verzeichnis schreiben (Auszug aus runvdr):

    Code
    echo "/var/log/vdr/core.%p" > /proc/sys/kernel/core_pattern


    Muss für systemd-Systeme aber nicht zielführend sein.


    Aber der core_pattern sollte dir verraten, wo normalerweise Coredumps angelegt werden.
    Bei systemd scheint es ja irgendwie durch systemd-coredump durchgeleitet zu werden (siehe deinen ersten Post).


    Lars.

  • In Theorie sammelt systemd die doch ein, oder?


    Ja, /proc/sys/kernel/core_pattern piped alles an systemd-coredump und das sollte das dann ins journal schreiben:

    Code
    |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e


    Leider funktioniert das bei mir aktuell für den VDR auch nicht (IIRC ging das aber schon mal) - ich vermute es hängt daran dass er als root gestartet wird und dann auf den User vdr droppt, denn laut der Manpage von core gelten da einige Beschränkungen:

    Eventuell hilft es wenn man den VDR nicht als root startet und dann auf den User vdr droppen lässt, sondern einfach die capabilites des Prozess über systemd richtig setzt und sich den Identitätswechsel erspart...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • OK. /prc/sys/kernel/core_pattern regelt das also.


    Auf meinem Desktop ist das identisch und wenn ich dort den chromium mit SIGSEGV abschieße bekomme ich auch einen Coredump gezeigt.
    Schieße ich auf dem VDR über die Konsole ein sleep 100 ab bekomme ich ebenfalls ein Coredump.


    Könntest du mal testen, ob du ein Coredump bekommst, wenn du den VDR mit SIGSEGV abschießt?


    Edit: seahawk1986: OK. Das werde ich mal testen.

  • So. VDR ohne festeinkompilierten User kompiliert. Und im Service File den User verbogen. Capabilities erstmal ignoriert.
    VDR startet als vdr User. SIGSEGV und kein Coredump


    User aus dem Service-File ausgetragen.
    VDR startet als root. SIGSEGV und kein Coredump


    Gut, vielleicht kommt beim VDR kein Coredump wenn man SIGSEGV macht.
    Defektes OSD-Demo Plugin (anderer Thread) zum crashen gebracht. Kein Coredump


    Um systemd auszuschließen habe ich dann osc** mit SIGSEGV abgeschossen. Das wird ebenfalls im Service-File auf einen User degradiert.
    Dort kommt ein Coredump.

  • Könntest du mal testen, ob du ein Coredump bekommst, wenn du den VDR mit SIGSEGV abschießt?

    Aktuell bekomme ich unter Arch Linux damit keinen Coredump. Die letzten Coredumps des VDR wurden bei mir um den Jahreswechsel herum gesammelt als ich eine zweite VDR-Instanz als normaler User von der Shell aus gestartet und ein Plugin beim Laden einen Segfault produziert hatte.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hat VDR evtl. keine Schreibrechte auf das Directory, in dem er ausgeführt wird?


    CU
    Oliver

  • Ich bekomme jetzt zumindest einen Coredump. Nur nicht so, wie ich das möchte. Ich hätte den Dump gerne in coredumpctl.


    Was habe ich gemacht. Ein bisschen im Internet recherchiert und dann das core_pattern manipuliert.


    Code
    # mkdir -p /tmp/cores
    # chmod a+rwx /tmp/cores/
    # echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
    # killall -SIGSEGV vdr
    
    
    # ls /tmp/cores/
    core.vdr.1388.vdr4arch.1392643896


    Warum bekomme ich hier jetzt einen Coredump, aber nicht in coredumpctl?


    Edit: OK. Ich komme der Sache näher. Coredump VDR 530MB (WTF?). Coredump O*C*M 19MB. Da funkt mir wohl irgendwo ein Sizelimit rein.
    Edit2: Und hier der entsprechende Bug dazu: https://bugs.freedesktop.org/show_bug.cgi?id=55613
    Edit3: Hmm. Als Maximum ist aber 767MB definiert --> http://cgit.freedesktop.org/sy…al/coredump.c?id=v208#n44

  • Wau, das ist ja ein großer Dump, ich weiß gar nicht, wie groß meine sind...
    Gerade mal nachgesehen: zwischen 730 und 790MB. Noch mal "Wau"...


    Lars.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!