Lösung 1:
Ich habe dies für eine andere Frage hier beantwortet:
Git kann nicht pushen mit Fehler 'out of memory'
Ich beantworte hier nicht alle Ihre Fragen, sondern die Frage in Ihrem Titel:
Wie man shmall, shmmax, shmmni, etc … im Allgemeinen und für Postgresql einstellt
Bei einigen Kernel-Distributionen gibt es Einstellungen, die verhindern, dass der Kernel einem einzelnen Prozess maximalen Speicher zuweist:
Kernel-Parameter festlegen
Ändern Sie /etc/sysctl.conf
Datei, um die für Ihr Betriebssystem geeigneten Zeilen einzufügen:
# Red Hat Enterprise Linux 3.0 and CentOS 3.x
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmin = 1
kernel.shmseg = 10
# semaphores:
semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128
fs.file-max = 65536
# Red Hat Enterprise Linux 4.0 and CentOS 4.x
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
Wenn Ihr Prozess die Grenzen überschreitet, beendet der Kernel den Prozess, obwohl der gemeldete maximale Speicher auf Ihrem System verfügbar ist.
Hinweis:Seien Sie vorsichtig mit diesen Einstellungen. Sie möchten die Einstellungen in diesem Beispiel wahrscheinlich nicht verwenden, da ich sie von einem Server in unserer Umgebung abgerufen habe.
Ein paar zusätzliche Anmerkungen zu erwähnen:
Verwenden Sie zum Aktualisieren und Testen der Kerneleinstellungen mit sysctl die folgenden Befehle:
Aktuelle Einstellungen auflisten:
sysctl -A | grep shm
sysctl -w kernel.shmmax=<value> to write in sysctl.conf
sysctl -p /etc/sysctl.conf to read/reload the values from sysctl.conf
Deaktivieren Sie Secure Linux, indem Sie /etc/selinux/config
bearbeiten Datei, stellen Sie sicher, dass das SELINUX-Flag wie folgt gesetzt ist.
SELINUX=disabled
Ist das angemessen? Wenn nicht (oder nicht unbedingt), in welchem Fall wäre es angemessen ?
Die Kernel-Einstellungen sind in Rechenzentrumsumgebungen normalerweise strenger definiert, wenn ISP-Anbieter nicht möchten, dass ein einzelner Kundenprozess alle Ressourcen auf einem gemeinsam genutzten Server in Beschlag nimmt.
Normalerweise müssen Sie die Kernel-Speicherparameter nicht setzen, es sei denn, Sie haben einen Prozess, der aufgrund von Ressourcenknappheit vom Kernel beendet wird.
In einigen Fällen kann Postgres bestimmten Seitengrößen auch mehr Arbeitsspeicher zuweisen, als im gemeinsam genutzten Arbeitsspeicher verfügbar ist:
* The PostgreSQL server failed to start. Please check the log output:
2011-11-04 05:06:26 UTC FATAL: could not create shared memory segment: Invalid
argument
2011-11-04 05:06:26 UTC DETAIL: Failed system call was shmget(key=5432001, size
=161849344, 03600).
2011-11-04 05:06:26 UTC HINT: This error usually means that PostgreSQL’s reques
t for a shared memory segment exceeded your kernel’s SHMMAX parameter. You can
either reduce the request size or reconfigure the kernel with larger SHMMAX. To
reduce the request size (currently 161849344 bytes), reduce PostgreSQL’s shared
_buffers parameter (currently 19200) and/or its max_connections parameter (curre
ntly 53).
If the request size is already small, it’s possible that it is less than
your kernel’s SHMMIN parameter, in which case raising the request size or recon
figuring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memo
ry configuration.
…fail!
Fehler wie im obigen Beispiel können behoben werden, indem Sie Ihre Kernel-Ressourceneinstellungen optimieren. Die empfohlenen Einstellungen und Methoden zur Bestimmung der Ressourceneinstellungen werden hier ausführlich beschrieben:
http://www.postgresql.org/docs/9.1/static/kernel-resources.html
Sie müssen diese Einstellungen jedoch nicht wirklich ändern, es sei denn, Sie stoßen auf Ressourcenknappheitssituationen im Zusammenhang mit dem Postgres-Prozess. Diese Situationen treten am häufigsten in gemeinsam genutzten Umgebungen oder auf Servern auf, denen nur wenige Ressourcen zugewiesen sind.
Kann jemand erklären, wie man sie wirklich von Grund auf einrichtet?
Was Postgres-Tuning betrifft, sollten Sie Folgendes lesen:
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
Lösung 2:
Oh!! Ich finde hier ein wunderbares Tool, um die optimale Mem-Konfiguration unseres Postgresql-Servers zu berechnen.
http://pgtune.leopard.in.ua/