Re: PG in container w/ pid namespace is init, process exits cause restart
От
Andrew Dunstan
Тема
Re: PG in container w/ pid namespace is init, process exits cause restart
Дата
Msg-id
caf7f1a0-2c7f-9b18-9d0f-560a99c6e3e9@dunslane.net
Ответ на
Список
Дерево обсуждения
PG in container w/ pid namespace is init, process exits cause restart Andres Freund <andres@anarazel.de>
Re: PG in container w/ pid namespace is init, process exits cause restart Alvaro Herrera <alvherre@alvh.no-ip.org>
Re: PG in container w/ pid namespace is init, process exits cause restart Andres Freund <andres@anarazel.de>
Re: PG in container w/ pid namespace is init, process exits cause restart Alvaro Herrera <alvherre@alvh.no-ip.org>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Andres Freund <andres@anarazel.de>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Andres Freund <andres@anarazel.de>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart ilmari@ilmari.org (Dagfinn Ilmari Mannsåker)
Re: PG in container w/ pid namespace is init, process exits cause restart Andrew Dunstan <andrew@dunslane.net>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Robert Haas <robertmhaas@gmail.com>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Robert Haas <robertmhaas@gmail.com>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Robert Haas <robertmhaas@gmail.com>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Alvaro Herrera <alvherre@alvh.no-ip.org>
Re: PG in container w/ pid namespace is init, process exits cause restart Greg Stark <stark@mit.edu>
Re: PG in container w/ pid namespace is init, process exits cause restart Justin Pryzby <pryzby@telsasoft.com>
Re: PG in container w/ pid namespace is init, process exits cause restart Tom Lane <tgl@sss.pgh.pa.us>
Re: PG in container w/ pid namespace is init, process exits cause restart Joe Conway <mail@joeconway.com>
Re: PG in container w/ pid namespace is init, process exits cause restart Andrew Dunstan <andrew@dunslane.net>
On 5/3/21 3:07 PM, Andres Freund wrote:
> Hi,
>
> A colleague debugged an issue where their postgres was occasionally
> crash-restarting under load.
>
> The cause turned out to be that a relatively complex archive_command was
> used, which could in some rare circumstances have a bash subshell
> pipeline not succeed. It wasn't at all obvious why that'd cause a crash
> though - the archive command handles the error.
>
> The issue turns out to be that postgres was in a container, with pid
> namespaces enabled. Because postgres was run directly in the container,
> without a parent process inside, it thus becomes pid 1. Which mostly
> works without a problem. Until, as the case here with the archive
> command, a sub-sub process exits while it still has a child. Then that
> child gets re-parented to postmaster (as init).
>
> Such a child is likely to have exited not just with 0 or 1, but
> something else. As the pid won't match anything in reaper(), we'll go to
> CleanupBackend(). Where any exit status but 0/1 will unconditionally
> trigger a restart:
>
> if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus))
> {
> HandleChildCrash(pid, exitstatus, _("server process"));
> return;
> }
>
>
> This kind of thing is pretty hard to debug, because it's not easy to
> even figure out what the "crashing" pid belonged to.
>
> I wonder if we should work a bit harder to try to identify whether an
> exiting process was a "server process" before identifying it as such?
>
> And perhaps we ought to warn about postgres running as "init" unless we
> make that robust?
>
Hmm, my initial reaction was if we detect very early on we're PID 1 then
fork and do all our work in the child, and in the parent just wait until
there are no more children. Not sure if that's feasible but I thought
I'd throw it out there.
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com
В списке pgsql-hackers по дате отправления
От: Alvaro Herrera
Дата:
От: Andres Freund
Дата: