> 19 июня 2019 г., в 21:05, Andrey Borodin <[email protected]> написал(а):
>
> But I've checked only on Yandex.Cloud clusters. I think I'll do repro on
> fresh Ubuntu...
So, I've tried the fix on Ubuntu 18.
There are much more leaked descriptors in this case and fix helps only partially
postgres@x4m-pg-test:/home/x4mmm$ pg_ctlcluster 10 main start
postgres@x4m-pg-test:/home/x4mmm$ lsof | grep 'postgresql-10-main.log' | grep
postgres | grep '/var/log'
postgres 4715 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4715 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4715 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4715 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4717 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4717 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4717 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4717 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4718 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4718 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4718 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4718 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4719 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4719 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4719 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4719 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4720 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4720 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4720 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4720 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4721 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4721 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4721 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4721 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4722 postgres 1w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4722 postgres 2w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4722 postgres 4w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4722 postgres 5w REG 252,1 1332
256830 /var/log/postgresql/postgresql-10-main.log
fixing pg_ctlcluster manually
postgres@x4m-pg-test:/usr/bin$ diff pg_ctlcluster pg_ctlcluster_copy
208,213c208,210
< #my $output = $info{'logfile'} && -r $info{'logfile'} ?
$info{'logfile'} : '/dev/null';
< #dup2(POSIX::open($output, POSIX::O_WRONLY | POSIX::O_APPEND |
POSIX::O_CREAT), 1);
< #dup2(POSIX::open($output, POSIX::O_WRONLY | POSIX::O_APPEND |
POSIX::O_CREAT), 2);
<
< open(STDOUT, ">>$info{logfile}") or die $!;
< open(STDERR, '>&STDOUT') or die $!;
---
> my $output = $info{'logfile'} && -r $info{'logfile'} ?
> $info{'logfile'} : '/dev/null';
> dup2(POSIX::open($output, POSIX::O_WRONLY | POSIX::O_APPEND |
> POSIX::O_CREAT), 1);
> dup2(POSIX::open($output, POSIX::O_WRONLY | POSIX::O_APPEND |
> POSIX::O_CREAT), 2);
postgres@x4m-pg-test:/usr/bin$ pg_ctlcluster 10 main start
postgres@x4m-pg-test:/usr/bin$ lsof | grep 'postgresql-10-main.log' | grep
postgres | grep '/var/log'
postgres 4880 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4880 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4882 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4882 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4883 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4883 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4884 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4884 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4885 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4885 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4886 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4886 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4887 postgres 1w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
postgres 4887 postgres 2w REG 252,1 2116
256830 /var/log/postgresql/postgresql-10-main.log
As you can see descriptors 4 and 5 are gone from postgres processes
(4880-4887)... But 1 and 2 are still there.
Best regards, Andrey Borodin.