Files
bambuddy/backend
maziggy 19dcc6d89b feat(support): record process memory, threads and children in bundles (#2734)
A bundle described everything except the process it runs in. So a report of
    memory climbing over days until the OOM killer fires arrives with no way to
    act on it: the numbers that name the mechanism only exist while it is
    happening, and by the time anyone asks, the container has been restarted.

    The new `process` section carries what actually separates the candidates.
    Resident against virtual memory: 650MB RSS with 12.9GB VMS is address
    space — thread stacks or allocator arenas — not a heap full of live data,
    and that reading is the opposite of the one the reporter drew from the same
    figures. Thread count and child-process count then split those two apart,
    and a census of live objects by type names what a growing heap is filling
    up with. Open files, sockets and uptime round it out.

    Three constraints worth keeping:

    The heap census is skipped above 2GB. gc.get_objects() materialises every
    tracked object, so it costs most on exactly the process that can least
    afford it — a bundle generated to diagnose runaway memory must not be the
    allocation that tips the host over. Everything else is still collected, and
    the skip is recorded with its reason rather than silently omitted.

    Children are recorded by executable name only. An ffmpeg command line
    carries the camera URL, and with it the camera's password.

    Collection runs off the event loop and every metric is independently
    best-effort. psutil raises on hardened kernels and in restricted
    containers, and the bundle is how someone reports a problem in the first
    place — it has to be produced even when half the numbers are unavailable.

    This does not fix #2734, and nothing here should be read as having found
    its cause. The bundle's own evidence contradicts both proposed causes: the
    orphan janitor ran 7 times in 26 days over 725 stream-ends and killed no
    orphaned ffmpeg, which is not the #776 signature; and the 5 "database is
    locked" errors all fall between two OOM kills, making them a symptom of the
    memory pressure rather than a source of it.
2026-08-02 09:51:01 +02:00
..