Re: [HACKERS] More postmaster troubles

From: Tatsuo Ishii <t-ishii(at)sra(dot)co(dot)jp>
To: "Daryl W(dot) Dunbar" <daryl(at)www(dot)com>
Cc: "pgsql-hackers(at)postgreSQL(dot) org" <pgsql-hackers(at)postgreSQL(dot)org>
Subject: Re: [HACKERS] More postmaster troubles
Date: 1999-02-13 06:03:26
Message-ID: 199902130603.PAA00422@ext16.sra.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> Solaris7 on a Sparc20 running 6.4.2. Occasionally (once or twice a
> day) under a very light load, brain-dead child processes begin to
> accumulate in my system. If left unchecked, eventually the parent
> process runs out of resources and dies, orphaning all the lost
> processes. (Now that I have solved the semaphore error, it appears
> to be the backend limit of 64 processes.)

Have you installed following patches? This solves the problem when #
of backends reaches MaxBackendId. I'm not sure if your problem relates
to this, though.

-------------------------------- cut here ---------------------------
*** postgresql-6.4.2/src/backend/postmaster/postmaster.c.orig Sun Nov 29 10:52:32 1998
--- postgresql-6.4.2/src/backend/postmaster/postmaster.c Sat Jan 9 18:14:52 1999
***************
*** 238,243 ****
--- 238,244 ----
static long PostmasterRandom(void);
static void RandomSalt(char *salt);
static void SignalChildren(SIGNAL_ARGS);
+ static int CountChildren(void);

#ifdef CYR_RECODE
void GetCharSetByHost(char *, int, char *);
***************
*** 754,764 ****
* by the backend.
*/

! if (BackendStartup(port) != STATUS_OK)
! PacketSendError(&port->pktInfo,
"Backend startup failed");
! else
! status = STATUS_ERROR;
}

/* Close the connection if required. */
--- 755,771 ----
* by the backend.
*/

! if (CountChildren() < MaxBackendId) {
! if (BackendStartup(port) != STATUS_OK)
! PacketSendError(&port->pktInfo,
"Backend startup failed");
! else {
! status = STATUS_ERROR;
! }
! } else {
! PacketSendError(&port->pktInfo,
! "There are too many backends");
! }
}

/* Close the connection if required. */
***************
*** 1617,1620 ****
--- 1624,1655 ----
}

return random() ^ random_seed;
+ }
+
+ /*
+ * Count up number of chidren processes.
+ */
+ static int
+ CountChildren(void)
+ {
+ Dlelem *curr,
+ *next;
+ Backend *bp;
+ int mypid = getpid();
+ int cnt = 0;
+
+ curr = DLGetHead(BackendList);
+ while (curr)
+ {
+ next = DLGetSucc(curr);
+ bp = (Backend *) DLE_VAL(curr);
+
+ if (bp->pid != mypid)
+ {
+ cnt++;
+ }
+
+ curr = next;
+ }
+ return(cnt);
}

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter T Mount 1999-02-13 11:02:49 JDBC lo crashes etc (fwd)
Previous Message Ken Mort 1999-02-13 04:11:48 8K block limit