all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Filip Schauer <f.schauer@proxmox.com>
To: Elias Huhsovitz <e.huhsovitz@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH manager v2] fix #8093: pvestatd: remove stale lxc console reaper
Date: Mon, 12 Oct 2026 15:26:08 +0200	[thread overview]
Message-ID: <aa25812a-beab-4e83-96e8-44cbeb498da2@proxmox.com> (raw)
In-Reply-To: <20261009123819.136563-1-e.huhsovitz@proxmox.com>

As far as my testing is concerned, the only way to produce an orphaned
lxc-console process is to manually send a SIGSTOP to the lxc-console
process and then stop the container. So I don't think this cleanup
serves any purpose.

As a test I started 50 containers and measured how long the
remove_stale_lxc_console call was taking: It took about 0.8 seconds on
my machine. Which is quite long considering it runs every 10 seconds.

Calling lxc-info twice for every running container every 10 seconds
sounds inefficient. So I am in favor of removing this so we at least
drop this from two lxc-info calls down to one lxc-info call per running
container every 10 seconds.

I applied this patch locally and bulk shutdown hundreds of containers
with lxc-consoles. Not a single stale lxc-console remained.

Tested-by: Filip Schauer <f.schauer@proxmox.com>
Reviewed-by: Filip Schauer <f.schauer@proxmox.com>


On 09/10/2026 14:38, Elias Huhsovitz wrote:
> remove_stale_lxc_consoles() calls PVE::LXC::vmstatus() every cycle,
> which runs `lxc-info` once per running container. Since
> update_lxc_status() already calls vmstatus() in the same cycle, this
> doubles the overhead of running `lxc-info`. Thus, this overhead is
> scaling linearly with the number of containers.
> 
> Under normal operation, lxc-console and dtach exit automatically when
> the container stops. The reaper only fires in broken system states, such
> as deleting the container config file while the container is still
> running. A continuous polling reaper is not an appropriate mechanism for
> these situations.

Even in this situation (deleting the container config while the
container is running) the reaper is not needed, since lxc-console exits
automatically when the container stops.

> 
> Remove the reaper entirely.
> 
> Signed-off-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
> ---
> This patch removes the reaper entirely. No replacement mechanism is
> added. If a console process becomes orphaned due to manual system
> interference, the administrator can identify and kill it directly.
> 
> A type of "replacement" machenanism that bridges this gap is
> currently being discussed [1], based on patch [2].
> 
> Alternatives considered
> -----------------------
> * Wrapping console commands in transient systemd scopes bound via
>    PartOf= to the container service.
>    Verdict: rejected because lxc-stop ends the
>    service without a systemd stop job, so PartOf= does not propagate.
> 
> * A manual `pct cleanup console` CLI tool.
>   Verdict: cleanup shouldn't be manual.
> 
> * An ExecStopPost= hook on pve-container@.service.
> 
> Changes v1->v2:
> ---------------
> * scrap the idea of binding console sessions to container lifetime via
>    systemd scoopes.
> 
> Previous versions
> -----------------
> v1: https://lore.proxmox.com/pve-devel/20261007083726.26067-1-e.huhsovitz@proxmox.com/
> 
> References
> ----------
> [1] https://lore.proxmox.com/pve-devel/82fceb8e-f52d-4e56-9dcf-5cd61393fa26@proxmox.com/
> [2] https://lore.proxmox.com/pve-devel/20260121112335.84473-1-f.schauer@proxmox.com/
> 
> Summary of Changes
> ------------------
>   PVE/Service/pvestatd.pm | 18 ------------------
>   1 file changed, 18 deletions(-)
> 
> diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm
> index 34f9da71..cec66e00 100755
> --- a/PVE/Service/pvestatd.pm
> +++ b/PVE/Service/pvestatd.pm
> @@ -444,20 +444,6 @@ sub update_qemu_status {
>       PVE::PullMetric::update($pull_txn, 'qemu', $vmstatus, $ctime);
>   }
>   
> -sub remove_stale_lxc_consoles {
> -
> -    my $vmstatus = PVE::LXC::vmstatus();
> -    my $pidhash = PVE::LXC::find_lxc_console_pids();
> -
> -    foreach my $vmid (keys %$pidhash) {
> -        next if defined($vmstatus->{$vmid});
> -        syslog('info', "remove stale lxc-console for CT $vmid");
> -        foreach my $pid (@{ $pidhash->{$vmid} }) {
> -            kill(9, $pid);
> -        }
> -    }
> -}
> -
>   my $rebalance_error_count = {};
>   
>   my $NO_REBALANCE;
> @@ -848,10 +834,6 @@ sub update_status {
>       $err = $@;
>       syslog('err', "storage status update error: $err") if $err;
>   
> -    eval { remove_stale_lxc_consoles(); };
> -    $err = $@;
> -    syslog('err', "lxc console cleanup error: $err") if $err;
> -
>       eval { rotate_authkeys(); };
>       $err = $@;
>       syslog('err', "authkey rotation error: $err") if $err;





  reply	other threads:[~2026-10-12 13:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-09 12:38 [PATCH manager v2] fix #8093: pvestatd: remove stale lxc console reaper Elias Huhsovitz
2026-10-12 13:26 ` Filip Schauer [this message]
2026-10-12 16:35 ` applied: " Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aa25812a-beab-4e83-96e8-44cbeb498da2@proxmox.com \
    --to=f.schauer@proxmox.com \
    --cc=e.huhsovitz@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal