Ubuntu
Ubuntu 16.04 LTS 更改 /lib/systemd/system/postgresql@.service 中的 OOMScoreAdjust 無效
作為標題,我的 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@.service
startup定義的服務/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