diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index 9de96ed..6bd9b54 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -591,9 +591,19 @@ CreateAnonymousSegment(Size *size)
 		ptr = mmap(NULL, allocsize, PROT_READ | PROT_WRITE,
 				   PG_MMAP_FLAGS | mmap_flags, -1, 0);
 		mmap_errno = errno;
-		if (huge_pages == HUGE_PAGES_TRY && ptr == MAP_FAILED)
-			elog(DEBUG1, "mmap(%zu) with MAP_HUGETLB failed, huge pages disabled: %m",
-				 allocsize);
+		if (ptr != MAP_FAILED)
+			using_huge_pages = true;
+		else if (huge_pages == HUGE_PAGES_TRY)
+			ereport(LOG,
+					(errmsg("could not map anonymous shared memory: %m"),
+				 	 (mmap_errno == ENOMEM) ?
+				 	 errhint("This error usually means that PostgreSQL's request "
+						 "for a shared memory segment exceeded available memory, "
+						 "swap space, or huge pages. To reduce the request size "
+						 "(currently %zu bytes), reduce PostgreSQL's shared "
+						 "memory usage, perhaps by reducing shared_buffers or "
+						 "max_connections.",
+						 allocsize) : 0));
 	}
 #endif
 
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index d7a7199..fad1f38 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -293,9 +293,10 @@ retry:
 				huge_pages == HUGE_PAGES_TRY &&
 				(flProtect & SEC_LARGE_PAGES) != 0)
 			{
-				elog(DEBUG1, "CreateFileMapping(%zu) with SEC_LARGE_PAGES failed, "
-					 "huge pages disabled",
-					 size);
+				ereport(LOG,
+						(errmsg("could not create shared memory segment: error code %lu", GetLastError()),
+						 errdetail("Failed system call was CreateFileMapping(size=%zu, name=%s).",
+								   size, szShareMem)));
 
 				/*
 				 * Use the original size, not the rounded-up value, when
@@ -324,6 +325,8 @@ retry:
 			Sleep(1000);
 			continue;
 		}
+		if ((flProtect & SEC_LARGE_PAGES) != 0)
+			using_huge_pages = true;
 		break;
 	}
 
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 467b0fd..10148c3 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -639,6 +639,7 @@ int			ssl_renegotiation_limit;
  */
 int			huge_pages;
 int			huge_page_size;
+bool			using_huge_pages;
 
 /*
  * These variables are all dummies that don't do anything, except in some
@@ -2116,6 +2117,16 @@ static struct config_bool ConfigureNamesBool[] =
 		NULL, NULL, NULL
 	},
 
+	{
+		{"using_huge_pages", PGC_INTERNAL, RESOURCES_MEM,
+			gettext_noop("Whether the instance is using HugePages."),
+			NULL
+		},
+		&using_huge_pages,
+		false,
+		NULL, NULL, NULL
+	},
+
 	/* End-of-list marker */
 	{
 		{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL, NULL
diff --git a/src/include/storage/pg_shmem.h b/src/include/storage/pg_shmem.h
index 059df1b..48efba6 100644
--- a/src/include/storage/pg_shmem.h
+++ b/src/include/storage/pg_shmem.h
@@ -45,6 +45,7 @@ typedef struct PGShmemHeader	/* standard header for all Postgres shmem */
 extern int	shared_memory_type;
 extern int	huge_pages;
 extern int	huge_page_size;
+extern bool	using_huge_pages;
 
 /* Possible values for huge_pages */
 typedef enum
