Thread

  1. DB Connections in TIME_WAIT state

    John Gateley <gateley@jriver.com> — 2008-05-13T13:22:15Z

    Hi, I'm using the Pg perl module to connect to Postgresql 8.1
    via localhost (127.0.0.1) from webscripts. I'm noticing a lot
    of TIME_WAIT socket connections:
    
    tcp        0      0 127.0.0.1:39291         127.0.0.1:5432          TIME_WAIT  
    tcp        0      0 127.0.0.1:60720         127.0.0.1:5432          TIME_WAIT  
    tcp        0      0 127.0.0.1:60735         127.0.0.1:5432          TIME_WAIT  
    tcp        0      0 127.0.0.1:60769         127.0.0.1:5432          TIME_WAIT  
    tcp        0      0 127.0.0.1:39281         127.0.0.1:5432          TIME_WAIT  
    ...
    
    I think the number is high enough (200~250) that sometime the
    server runs out of sockets.
    
    What's the proper way to close the postgresql connection so that
    it doesn't go into a TIME_WAIT state?
    
    I tried:
    
    use Pg;
    my $Connection = Pg::connectdb($ConnectString);
    ... do some stuff
    $Connection = 0;
    
    That doesn't seem to close the connection.
    
    Any ideas?
    
    Thanks,
    
    j
    -- 
    John Gateley <gateley@jriver.com>
    
    
  2. Re: DB Connections in TIME_WAIT state

    Tom Lane <tgl@sss.pgh.pa.us> — 2008-05-13T14:23:48Z

    John Gateley <gateley@jriver.com> writes:
    > Hi, I'm using the Pg perl module to connect to Postgresql 8.1
    > via localhost (127.0.0.1) from webscripts. I'm noticing a lot
    > of TIME_WAIT socket connections:
    
    > tcp        0      0 127.0.0.1:39291         127.0.0.1:5432          TIME_WAIT  
    > tcp        0      0 127.0.0.1:60720         127.0.0.1:5432          TIME_WAIT  
    > tcp        0      0 127.0.0.1:60735         127.0.0.1:5432          TIME_WAIT  
    > tcp        0      0 127.0.0.1:60769         127.0.0.1:5432          TIME_WAIT  
    > tcp        0      0 127.0.0.1:39281         127.0.0.1:5432          TIME_WAIT  
    > ...
    
    This seems like a kernel bug to me.  The TCP stack ought to know it
    doesn't need any shutdown delay on a local connection.
    
    > I think the number is high enough (200~250) that sometime the
    > server runs out of sockets.
    
    Maybe you need to stop using so many connections --- quite aside
    from any kernel issues, a database session isn't exactly cheap
    to launch.  Consider some form of connection pooling.
    
    			regards, tom lane