Solusi 1:
Gunakan ipcs -l
untuk memeriksa batas yang benar-benar berlaku, dan ipcs -a
dan ipcs -m
untuk melihat apa yang digunakan, sehingga Anda dapat membandingkan hasilnya. Lihat nattch
kolom:apakah ada segmen tanpa proses terpasang yang tidak dihapus saat proses keluar (yang biasanya berarti program macet)? ipcrm
dapat menghapusnya, meskipun jika ini adalah mesin uji, reboot lebih cepat (dan akan memastikan perubahan Anda pada batas diambil).
Parameter kernel Anda tampak aneh. Secara khusus, shmall
adalah hitungan halaman, bukan byte, dan 4kB adalah ukuran halaman default (jalankan getconf PAGESIZE
untuk memeriksa apa yang Anda gunakan). Berapa terabyte RAM yang Anda miliki?
Sekarang, Anda mengatakan Anda mendapatkan sekitar 32771 segmen memori bersama, yang juga sekitar 32768 (atau 2 banding 15) yang menunjukkan int 16-bit yang ditandatangani adalah faktor pembatas. Dan kernel apa yang Anda jalankan (karena ini akan memiliki batasannya sendiri)? Keduanya mungkin terkait.
Solusi 2:
Ternyata shmmni terbatas pada 32768 di kernel:
#define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
dalam file ...version.../include/linux/ipc.h
.
Sangat singkat untuk mengkompilasi ulang kernel, itu adalah batas keras pada jumlah segmen memori bersama.