Re: MacOS X Shared Buffers (SHMMAX)?

Nigel J. Andrews <nandrews@investsystems.co.uk>

From: "Nigel J. Andrews" <nandrews@investsystems.co.uk>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: "Command Prompt, Inc." <pgsql-general@commandprompt.com>, Steve Lane <slane@fmpro.com>, jlx@commandprompt.com, pgsql-general@postgresql.org
Date: 2002-05-23T14:09:53Z
Lists: pgsql-general, pgsql-sql
On Wed, 22 May 2002, Tom Lane wrote:

> "Command Prompt, Inc." <pgsql-general@commandprompt.com> writes:
> > I was able to pull down the source for the Kernel, and increased the
> > SHMMAX by a factor of 16. Upgraded to the new Kernel and I am now able to
> > get safely 512 connections, even up around 900, but bumping it up to 1024,
> > I run into the following error:
> 
> > PGSTATBUFF: recvfrom(2): Resource temporarily unavailable
> > DEBUG:  statistics collector process (pid 1988) exited with exit code 1
> 
> > ...which then repeats itself infinitely until the calling process is
> > stopped. ;)
> 
> [ scratches head... ] "Resource temporarily unavailable" is EAGAIN
> according to /usr/include/sys/errno.h on my OSX machine.  But the man
> page for recvfrom doesn't mention any plausible reasons for EAGAIN to
> be signaled.  select() just told us there was data available on the
> socket, so WTF?  Could this be a kernel bug?
> 
> You could try modifying pgstat.c to continue its loop rather than
> exiting after it gets a recvfrom error.  But if the error condition
> recurs that'll just put pgstat.c into an infinite loop, so I'm not
> sure this is any solution --- just a way of gathering more data.

My 'standard' way of doing this is to loop while the error is EAGAIN but with a
small retry counter to limit the number of attempts made. Hopefully the second
time through the call isn't interrupted again. Therefore I'm usually quite
happy saying that after something like 5 calls to a routine then there really
is an error.

Isn't this how people normally handle this?

-- 
Nigel J. Andrews
Director

---
Logictree Systems Limited
Computer Consultants