Solusi 1:
Saya menjawab ini untuk pertanyaan lain di sini:
Git gagal mendorong dengan kesalahan 'kehabisan memori'
Saya tidak menjawab semua pertanyaan Anda di sini, tetapi pertanyaan dalam judul Anda:
Cara setting shmall, shmmax, shmmni, dll… secara umum dan untuk postgresql
Pada beberapa distribusi kernel, ada pengaturan yang mencegah kernel mengalokasikan memori maksimum ke satu proses:
Tetapkan Parameter Kernel
Ubah /etc/sysctl.conf
file untuk menyertakan baris yang sesuai dengan sistem operasi Anda:
# 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
Jika proses Anda melebihi batas, kernel akan mematikan proses meskipun memori maksimum yang dilaporkan tersedia di sistem Anda.
Catatan:hati-hati dengan pengaturan ini. Anda mungkin tidak ingin menggunakan setelan dalam contoh tersebut karena saya menariknya dari server di lingkungan kami.
Beberapa catatan tambahan untuk disebutkan:
Untuk memperbarui dan menguji pengaturan kernel dengan sysctl, gunakan perintah berikut:
Cantumkan setelan saat ini:
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
Nonaktifkan secure linux dengan mengedit /etc/selinux/config
file, pastikan flag SELINUX disetel sebagai berikut.
SELINUX=disabled
Apakah ini sesuai? Jika tidak (atau tidak harus), dalam hal apa itu akan sesuai ?
Pengaturan kernel biasanya lebih ketat didefinisikan dalam lingkungan pusat data ketika penyedia ISP tidak ingin satu proses pelanggan memonopoli semua sumber daya di server bersama.
Anda biasanya tidak perlu menyetel parameter memori kernel kecuali Anda memiliki proses yang dimatikan oleh kernel karena kekurangan sumber daya.
Dalam beberapa kasus, postgres juga dapat mengalokasikan lebih banyak mem untuk ukuran halaman tertentu daripada yang tersedia di memori bersama:
* 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!
Error seperti contoh di atas, bisa diatasi dengan men-tweak pengaturan resource kernel Anda. Setelan dan metode yang direkomendasikan, untuk menentukan setelan sumber daya, dijelaskan secara mendetail di sini:
http://www.postgresql.org/docs/9.1/static/kernel-resources.html
Namun, Anda benar-benar tidak perlu menyentuh pengaturan ini kecuali jika Anda mengalami situasi kekurangan sumber daya yang terkait dengan proses postgres. Situasi ini paling sering terjadi di lingkungan atau server bersama dengan sedikit sumber daya yang dialokasikan untuknya.
Adakah yang bisa menjelaskan cara mengaturnya dari awal?
Untuk penyetelan Postgres, Anda harus membaca ini:
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
Solusi 2:
Oh!! Saya menemukan alat yang bagus untuk menghitung konfigurasi optimus mem dari server postgresql kami di sini.
http://pgtune.leopard.in.ua/