> 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.

Reply via email to