Skip to content

python: ebpf: _terminate() blocking #744

@Jongy

Description

@Jongy

I got this dump from a test deployment of a gProfiler 1.19.0, which became stuck.

Thread 16815 (idle): "ThreadPoolExecutor-0_3"
    _try_wait (subprocess.py:1901)
        Arguments:
            self: <Popen at 0x7f92f05ccd60>
            wait_flags: 0
    _wait (subprocess.py:1943)
        Arguments:
            self: <Popen at 0x7f92f05ccd60>
            timeout: None
    wait (subprocess.py:1209)
        Arguments:
            self: <Popen at 0x7f92f05ccd60>
            timeout: None
    _terminate (python_ebpf.py:254)
        Arguments:
            self: <PythonEbpfProfiler at 0x7f92f8b0b010>
        Locals:
            code: None
    _dump (python_ebpf.py:221)
        Arguments:
            self: <PythonEbpfProfiler at 0x7f92f8b0b010>
        Locals:
            process: <Popen at 0x7f92f05ccd60>
    snapshot (python_ebpf.py:227)
        Arguments:
            self: <PythonEbpfProfiler at 0x7f92f8b0b010>
    snapshot (python.py:403)
        Arguments:
            self: <PythonProfiler at 0x7f92f8b0add0>
    run (thread.py:58)
        Arguments:
            self: <_WorkItem at 0x7f92f028aa10>
    _worker (thread.py:83)
        Arguments:
            executor_reference: <weakref.ReferenceType at 0x7f92f8b97fb0>
            work_queue: <_queue.SimpleQueue at 0x7f92f8b1f830>
            initializer: None
            initargs: ()
        Locals:
            work_item: <_WorkItem at 0x7f92f028aa10>

gProfiler tried to stop PyPerf, it sent SIGTERM and PyPerf indeed exited with SIGTERM. However, gProfiler remains blocked in the wait function. Not sure if it's a bug in python stdlib/gprofiler/kernel lol. Why would wait block if PyPerf truly exited?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions