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);
}
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 |