Postgresql – max_stack_depth wird nicht geändert, auch wenn stack in limits.conf geändert wird

Der Versuch, Änderungen an max_stack_depth vorzunehmen mit select set_config('max_stack_depth', '512MB', false); bringt den im Postgresql-Protokoll angezeigten Fehler:

DETAIL: "max_stack_depth" must not exceed 7680kB.

HINT: Increase the platform's stack depth limit via "ulimit -s" or local equivalent.

tatsächlich existiert die folgende Zeile in limits.conf. Habe versucht, den Postgresql-Prozess mit prlimit zu aktualisieren und sogar den Server neu zu starten (OS:Ubuntu). Es wird nicht der gleiche Fehler gemeldet.

* soft stack 524288

Wenn Sie zum Benutzer postgres wechseln und die Stack-Größe mit ulimit -s überprüfen, ist sie bereits auf 512 MB eingestellt.

Dies zeigt, dass es kein ulimit -s gibt, um die Stapelgröße unter /etc zu ändern.

$ sudo grep -r ulimit /etc/*

/etc/init.d/lxd: ulimit -n 65536

/etc/vmware-tools/vm-support:runcmd "/tmp/ulimit-a.txt" ulimit -a

Es ist nicht sicher, warum postgresql diese Änderung immer noch nicht sieht?

Beste Antwort

Diese Lösung funktioniert unter Fedora Linux, sollte aber auch unter Ubuntu funktionieren. Das Problem ist, dass systemd nicht nur initd ersetzen will, sondern auch Sicherheitsfunktionen übernehmen will, die traditionell von Dingen wie /etc/security/limits.conf gehandhabt wurden. (Es gibt auch andere Bereiche, in denen es stört). Wenn systemd PostgreSQL startet, ignoriert es /etc/security/limits.conf und wendet seine eigenen Standardlimits an. Gehen Sie wie folgt vor, um sie zu ändern:

mkdir /etc/systemd/system/postgresql.service.d

cat > /etc/systemd/system/postgresql.service.d/postgresql.conf << XYZZY

[Unit]

Description=PostgreSQL database server

After=network.target

[Service]

LimitSTACK=infinity

XYZZY

systemctl daemon-reload

Diese Methode hat auch den zusätzlichen Vorteil, dass sie die Standardänderungen an Service-Unit-Dateien nicht beeinträchtigt, wenn sie upstream aktualisiert werden, aber Ihre Einstellungen dauerhaft außer Kraft setzt. Dieser hilfreiche Beitrag listet die anderen Grenzwerte auf, die durch die Systemkonfiguration festgelegt werden können.

Ich sollte beachten, dass ich zuerst versucht habe, das Limit auf 131072 zu setzen, aber als ich versuchte, PostgreSQL zu starten, bekam ich diesenFehler:

DETAIL: "max_stack_depth" must not exceed -384kB.

Durch die Änderung in infinity (unendlich) konnte PostgreSQL gestartet werden.

Dieser Beitrag wurde unter POSTGRES veröffentlicht. Setze ein Lesezeichen auf den Permalink.