GNU/Linux >> Linux Esercitazione >  >> Linux

Come impostare shmall, shmmax, shmmin, ecc... in generale e per postgresql

Soluzione 1:

Ho risposto a questo per un'altra domanda qui:

Git non riesce a eseguire il push con errore 'memoria esaurita'

Non sto rispondendo a tutte le tue domande qui, ma alla domanda nel tuo titolo:

Come impostare shmall, shmmax, shmmni, ecc... in generale e per postgresql

Con alcune distribuzioni del kernel, ci sono impostazioni che impediscono al kernel di allocare la massima memoria a un singolo processo:

Imposta i parametri del kernel

Modifica il /etc/sysctl.conf file per includere le righe appropriate per il tuo sistema operativo:

# 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

Se il tuo processo supera i limiti, il kernel interromperà il processo nonostante la memoria massima segnalata sia disponibile sul tuo sistema.

Nota:fai attenzione a queste impostazioni. Probabilmente non vorrai utilizzare le impostazioni in quell'esempio poiché le ho estratte da un server nel nostro ambiente.

Alcune note extra da menzionare:

Per aggiornare e testare le impostazioni del kernel con sysctl, usa i seguenti comandi:

Elenca le impostazioni correnti:

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

Disabilita secure linux modificando il /etc/selinux/config file, assicurandosi che il flag SELINUX sia impostato come segue.

SELINUX=disabled

È appropriato? Se no (o non necessariamente), in quale caso sarebbe appropriato?

Le impostazioni del kernel sono in genere definite in modo più rigoroso negli ambienti di data center quando i provider ISP non vogliono che un singolo processo del cliente monopolizzi tutte le risorse su un server condiviso.

Di solito non devi impostare i parametri della memoria del kernel a meno che tu non abbia un processo che viene ucciso dal kernel a causa dell'esaurimento delle risorse.

In alcuni casi, postgres può anche allocare più memoria a dimensioni di pagina specifiche rispetto a quanto disponibile nella memoria condivisa:

* 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!

Errori come l'esempio precedente possono essere risolti modificando le impostazioni delle risorse del kernel. Le impostazioni e i metodi consigliati per determinare le impostazioni delle risorse sono descritti in dettaglio qui:

http://www.postgresql.org/docs/9.1/static/kernel-resources.html

Tuttavia, non è necessario toccare queste impostazioni a meno che non si riscontrino situazioni di esaurimento delle risorse relative al processo postgres. Queste situazioni si verificano, molto spesso, in ambienti o server condivisi con poche risorse allocate.

Qualcuno può spiegare come impostarli davvero da zero?

Per quanto riguarda l'ottimizzazione di Postgres, dovresti leggere questo:

http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

Soluzione 2:

Oh!! Trovo qui uno strumento meraviglioso per calcolare l'optimus mem config del nostro server postgresql.

http://pgtune.leopard.in.ua/


Linux
  1. Come elencare e impostare il contesto SELinux per MySQL Server

  2. Come impostare la variabile di ambiente per tutti nel mio sistema Linux?

  3. Come posso impostare il completamento automatico per i comandi Git?

  4. Come impostare JAVA_HOME in Linux per tutti gli utenti

  5. Come si imposta una password per il demone di trasmissione, il server client BitTorrent?

Come installare e configurare SeedDMS

Come configurare i dispositivi Razer su Linux per effetti di luce e altre configurazioni

Come impostare data e ora su Linux

Come posso impostare un nick predefinito per le nuove connessioni irssi?

Come impostare il percorso per i comandi sudo

Come impostare correttamente zram e swap