@@ -1971,8 +1971,8 @@ default:\
1971
1971
-->
1972
1972
<para>
1973
1973
在Linux 2.4 以及之后的版本里,缺省的虚拟内存的行为不是对<productname>PostgreSQL</productname>最优的。
1974
- 原因在于内核实现内存过提交的方法,如果其它进程的内存请求导致系统用光虚拟内存 ,
1975
- 那么内核可能会终止<productname>PostgreSQL</productname>主服务器进程 。
1974
+ 原因在于内核实现内存过提交的方法,如果<productname>PostgreSQL</productname>或其它进程的内存请求导致系统用光虚拟内存 ,
1975
+ 那么内核可能会终止<productname>PostgreSQL</productname>的postmaster主服务器进程 。
1976
1976
</para>
1977
1977
1978
1978
<para>
@@ -1981,8 +1981,8 @@ default:\
1981
1981
this (consult your system documentation and configuration on where
1982
1982
to look for such a message):
1983
1983
-->
1984
- 如果发生了这样的事情,你会看到像下面这样的内核信息 (参考你的系统文档和配置,
1985
- 看看在哪里能看到这样的信息 ):
1984
+ 如果发生了这样的事情,你会看到像下面这样的内核消息 (参考你的系统文档和配置,
1985
+ 看看在哪里能看到这样的消息 ):
1986
1986
<programlisting>
1987
1987
Out of Memory: Killed process 12345 (postgres).
1988
1988
</programlisting>
@@ -1994,7 +1994,7 @@ Out of Memory: Killed process 12345 (postgres).
1994
1994
<productname>PostgreSQL</productname> will need to be restarted.
1995
1995
-->
1996
1996
这表明<filename>postgres</filename>因为内存压力而终止了。尽管现有的数据连接将继续正常运转,
1997
- 但是新的连接将无法接受 。要想恢复,你应该重启<productname>PostgreSQL</productname>。
1997
+ 但是将无法接受新的连接 。要想恢复,你应该重启<productname>PostgreSQL</productname>。
1998
1998
</para>
1999
1999
2000
2000
<!--
@@ -2010,6 +2010,7 @@ Out of Memory: Killed process 12345 (postgres).
2010
2010
-->
2011
2011
<para>
2012
2012
一个避免这个问题的方法是在一台你确信不会因为其它进程而耗尽内存的机器上运行<productname>PostgreSQL</productname>。
2013
+ 如果内存紧张,增加操作系统的交换空间有助于避免这个问题,因为OOM(out-of-memory) killer只有在物理内存和交换空间都耗尽时才会被调用。
2013
2014
</para>
2014
2015
2015
2016
<!--
@@ -2027,12 +2028,12 @@ Out of Memory: Killed process 12345 (postgres).
2027
2028
</para>
2028
2029
-->
2029
2030
<para>
2030
- 如果<productname>PostgreSQL</productname>本身是系统耗尽内存的原因 ,你可以通过改变你的配置来避免这个问题。
2031
- 在某些情况下,这样可能帮助降低内存相关的配置参数 ,尤其是<link linkend="guc-shared-buffers"><varname>shared_buffers</></link>
2031
+ 如果<productname>PostgreSQL</productname>本身是系统内存耗尽的原因 ,你可以通过改变你的配置来避免这个问题。
2032
+ 在某些情况下,调低内存相关的配置参数可能有所帮助 ,尤其是<link linkend="guc-shared-buffers"><varname>shared_buffers</></link>
2032
2033
和<link linkend="guc-work-mem"><varname>work_mem</></link>。其他情况下,
2033
- 这个问题可能是由于允许太多的连接到数据库服务器本身引起的 。在许多情况下,
2034
- 减少 <link linkend="guc-max-connections"><varname>max_connections</></link>
2035
- 而不是利用外部连接池的软件会更好 。
2034
+ 这个问题可能是由于允许太多的连接连到数据库服务器引起的 。在许多情况下,
2035
+ 减小 <link linkend="guc-max-connections"><varname>max_connections</></link>
2036
+ ,并且作为替代,利用外部连接池软件会更好 。
2036
2037
</para>
2037
2038
2038
2039
@@ -2048,8 +2049,8 @@ Out of Memory: Killed process 12345 (postgres).
2048
2049
-->
2049
2050
在 Linux 2.6 以及以后的版本里,可以修改内存的行为,这样它就不会再<quote>过提交</>内存。
2050
2051
尽管这个设置将不会完全阻止<ulink url="http://lwn.net/Articles/104179/">OOM killer</>
2051
- 被引用 ,然是它将显著地减少并且将因此导致更稳健的系统行为。
2052
- 这是通过用 <command>sysctl</command>选取一个严格的过提交模式实现的 :
2052
+ 被调用 ,然是它将显著地减少并且将因此导致更稳健的系统行为。
2053
+ 这通过用 <command>sysctl</command>选取一个严格的过提交模式实现 :
2053
2054
<programlisting>
2054
2055
sysctl -w vm.overcommit_memory=2
2055
2056
</programlisting>
@@ -2072,10 +2073,10 @@ sysctl -w vm.overcommit_memory=2
2072
2073
<literal>-1000</>, thereby guaranteeing it will not be targeted by the OOM
2073
2074
killer. The simplest way to do this is to execute
2074
2075
-->
2075
- 另外一种方法,改变或不改变 <varname>vm.overcommit_memory</>都可以使用,
2076
- 设置与进程相关的 <varname>oom_score_adj</>值为主进程 <literal>-1000</>,
2076
+ 另外一种方法,不管改变或不改变 <varname>vm.overcommit_memory</>都可以使用,
2077
+ 为postmaster进程设置进程相关的 <varname>oom_score_adj</>值为 <literal>-1000</>,
2077
2078
从而保证它不会成为OOM killer的目标。
2078
- 最简单的方法是在调用postmaster之前在postmaster的启动脚本执行 :
2079
+ 最简单的方法是在postmaster的启动脚本里在调用postmaster之前执行 :
2079
2080
<programlisting>
2080
2081
echo -1000 > /proc/self/oom_score_adj
2081
2082
</programlisting>
@@ -2090,9 +2091,9 @@ echo -1000 > /proc/self/oom_score_adj
2090
2091
target them at need.
2091
2092
-->
2092
2093
请注意,这个操作必须由root来做,否则将不会有任何作用;所以一个root所有的启动脚本是做这个最简单的地方。
2093
- 如果你这样做,你可能也希望用 <literal>-DLINUX_OOM_SCORE_ADJ=0</>添加到<varname>CPPFLAGS</>
2094
- 来建立 <productname>PostgreSQL</>。这将导致主子进程以标准 <varname>oom_score_adj</>值0来运行,
2095
- 所以OOM killer仍然可以在需要时以它们为目标 。
2094
+ 如果你这样做,你可能也希望把 <literal>-DLINUX_OOM_SCORE_ADJ=0</>添加到<varname>CPPFLAGS</>
2095
+ 来编译 <productname>PostgreSQL</>。这将导致postmaster子进程以标准 <varname>oom_score_adj</>值0来运行,
2096
+ 所以OOM killer仍然可以在需要时把它们作为目标 。
2096
2097
</para>
2097
2098
2098
2099
<!--
@@ -2108,7 +2109,7 @@ echo -1000 > /proc/self/oom_score_adj
2108
2109
<para>
2109
2110
老版本的Linux内核不提供<filename>/proc/self/oom_score_adj</>,但是可能有相同功能的名为
2110
2111
<filename>/proc/self/oom_adj</>的以前的版本。除了禁用值为<literal>-17</>而不是<literal>-1000</>
2111
- 外,它们做相同的工作。相应的<productname>PostgreSQL</>的建立标识为 <literal>-DLINUX_OOM_ADJ=0</>。
2112
+ 外,它们做相同的工作。相应的<productname>PostgreSQL</>的编译宏定义为 <literal>-DLINUX_OOM_ADJ=0</>。
2112
2113
</para>
2113
2114
2114
2115
<note>
0 commit comments