Ubuntu 16.04 LTS在/lib/systemd/system/[email protected]中更改OOMScoreAdjust不起作用

作为标题,我有我的postgresql @ .service完成如下:

# systemd service template for PostgreSQL clusters. The actual instances will # be called "postgresql@version-cluster", eg "[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。 我不知道出了什么问题?

/lib/systemd/system/[email protected]定义的服务启动/usr/bin/pg_ctlcluster 。 在pg_ctlcluster里面我们find这个:

 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 [email protected] # definitely systemctl stop [email protected] systemctl start [email protected]