Document how to prevent PostgreSQL itself from exhausting memory.

The existing documentation in Linux Memory Overcommit seemed to
assume that PostgreSQL itself could never be the problem, or at
least it didn't tell you what to do about it.

Per discussion with Craig Ringer and Kevin Grittner.
This commit is contained in:
Robert Haas 2012-08-30 14:14:22 -04:00
parent 3e6eb0dd0a
commit 35738b5906

View File

@ -1203,8 +1203,9 @@ default:\
optimal for <productname>PostgreSQL</productname>. Because of the
way that the kernel implements memory overcommit, the kernel might
terminate the <productname>PostgreSQL</productname> postmaster (the
master server process) if the memory demands of
another process cause the system to run out of virtual memory.
master server process) if the memory demands of either
<productname>PostgreSQL</productname> or another process cause the
system to run out of virtual memory.
</para>
<para>
@ -1231,6 +1232,19 @@ Out of Memory: Killed process 12345 (postgres).
swap space are exhausted.
</para>
<para>
If <productname>PostgreSQL</productname> itself is the cause of the
system running out of memory, you can avoid the problem by changing
your configuration. In some cases, it may help to lower memory-related
configuration parameters, particularly
<link linkend="guc-shared-buffers"><varname>shared_buffers</></link>
and <link linkend="guc-work-mem"><varname>work_mem</></link>. In
other cases, the problem may be caused by allowing too many connections
to the database server itself. In many cases, it may be better to reduce
<link linkend="guc-max-connections"><varname>max_connections</></link>
and instead make use of external connection-pooling software.
</para>
<para>
On Linux 2.6 and later, it is possible to modify the
kernel's behavior so that it will not <quote>overcommit</> memory.