正如标题所示,我有我的[电子邮件保护]操作如下:
# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "[email protected]". 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。我想知道出了什么问题?
答案1
由starts-up定义的服务。我们在里面找到以下内容:/lib/systemd/system/[email protected]
/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
,它完成了工作。
答案2
您必须在进行更改后重新加载服务,或者为确保更改生效,请停止服务然后重新启动它。
# maybe
systemctl reload [email protected]
# definitely
systemctl stop [email protected]
systemctl start [email protected]