diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c
index cc36b80699b4997cd46baaaef49aa23b5bca3d24..b71d10ea8f4b365fe857534b6f0123cb59a0b11c 100644
--- a/src/backend/storage/ipc/ipc.c
+++ b/src/backend/storage/ipc/ipc.c
@@ -22,6 +22,10 @@
 #include <signal.h>
 #include <unistd.h>
 #include <sys/stat.h>
+#if defined(__hpux)
+#include <sys/param.h>
+#include <sys/pstat.h>
+#endif
 
 #include "miscadmin.h"
 #ifdef PROFILE_PID_DIR
@@ -80,6 +84,46 @@ static int	on_proc_exit_index,
 			before_shmem_exit_index;
 
 
+/* Report process's stack consumption to stderr */
+static void
+report_stack_size(void)
+{
+#if defined(__hpux)
+	/* HPUX: examine process's memory map with pstat_getprocvm() */
+	int			targetpid = getpid();
+	struct pst_vm_status buf;
+	int			res;
+	int			ndx;
+
+	for (ndx = 0;; ndx++)
+	{
+		res = pstat_getprocvm(&buf, sizeof(buf), targetpid, ndx);
+		if (res < 0)
+		{
+			perror("getprocvm");
+			break;
+		}
+		if (res != 1)
+			break;
+		if (buf.pst_type != PS_STACK)
+			continue;
+		fprintf(stderr, "%d: stack addr 0x%lx, length %ld, physical pages %ld\n",
+				targetpid,
+				buf.pst_vaddr,
+				buf.pst_length,
+				buf.pst_phys_pages);
+	}
+#else							/* non HPUX */
+	/* Otherwise: try to use pmap.  No error if that doesn't work. */
+	char		sysbuf[128];
+
+	snprintf(sysbuf, sizeof(sysbuf), "pmap -x %d | grep -i stack 1>&2",
+			 (int) getpid());
+	(void) system(sysbuf);
+#endif
+}
+
+
 /* ----------------------------------------------------------------
  *		proc_exit
  *
@@ -101,6 +145,9 @@ proc_exit(int code)
 	/* Clean up everything that must be cleaned up */
 	proc_exit_prepare(code);
 
+	/* report stack size to stderr */
+	report_stack_size();
+
 #ifdef PROFILE_PID_DIR
 	{
 		/*