Ubuntu

Ubuntu 16.04 LTS 更改 /lib/systemd/system/postgresql@.service 中的 OOMScoreAdjust 無效

  • September 14, 2016

作為標題,我的 postgresql@.service 完成如下:

# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "postgresql@9.3-main". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

[Service]
Type=forking
# @: use "postgresql@%i" as process name
ExecStart=@/usr/bin/pg_ctlcluster postgresql@%i --skip-systemctl-redirect %i start
ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop
ExecReload=/usr/bin/pg_ctlcluster --skip-systemctl-redirect %i reload
PIDFile=/var/run/postgresql/%i.pid
SyslogIdentifier=postgresql@%i
# prevent OOM killer from choosing the postmaster (individual backends will
# reset the score to 0)
OOMScoreAdjust=-999
# restarting automatically will prevent "pg_ctlcluster ... stop" from working,
# so we disable it here. Also, the postmaster will restart by itself on most
# problems anyway, so it is questionable if one wants to enable external
# automatic restarts.
#Restart=on-failure
# (This should make pg_ctlcluster stop work, but doesn't:)
#RestartPreventExitStatus=SIGINT SIGTERM

[Install]
WantedBy=multi-user.target

然後我搜尋/proc/pid/oom_score_adj,它仍然總是顯示預設值-900。我想知道出了什麼問題?

/lib/systemd/system/postgresql@.servicestartup定義的服務/usr/bin/pg_ctlcluster。在裡面pg_ctlcluster我們發現:

if ($action eq 'start' and $version >= '9.0' and not $PgCommon::rpm) {
   if (-w '/proc/self/oom_score_adj') {
       open F, '>/proc/self/oom_score_adj';
       print F "-900\n";
       close F;
   } 
}

似乎 Postgres 自己的腳本在啟動時設置了該值。我對其進行了編輯,-999它完成了這項工作。

您必須在進行更改後重新載入服務,或者為了確保更改生效,請停止服務然後重新啟動它。

# maybe
systemctl reload postgresql@9.3-main

# definitely
systemctl stop postgresql@9.3-main
systemctl start postgresql@9.3-main

引用自:https://serverfault.com/questions/800184