GNU/Linux >> Belajar Linux >  >> Linux

Memori bersama:shmget gagal:Tidak ada ruang tersisa di perangkat -- bagaimana cara meningkatkan batas?

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.


Linux
  1. Bash:Tidak ada ruang tersisa di perangkat

  2. Bagaimana cara mengakses (jika mungkin) ruang kernel dari ruang pengguna?

  3. Bagaimana cara memetakan buffer kernel Linux ke ruang pengguna?

  1. Memori bersama Linux:shmget() vs mmap()?

  2. Tidak ada ruang tersisa di perangkat

  3. AWS EC2 - Tidak Ada Ruang Tersisa di Perangkat

  1. Bagaimana Cara Menemukan Modul Kernel Untuk Perangkat yang Diberikan?

  2. Bagaimana cara memeriksa berapa banyak ruang kosong yang tersisa di perangkat untuk membuat partisi

  3. Berapa banyak RAM yang digunakan kernel?