GNU/Linux >> Znalost Linux >  >> Linux

Sdílená paměť:shmget selže:Na zařízení nezbývá místo – jak zvýšit limity?

Řešení 1:

Použijte ipcs -l pro kontrolu aktuálně platných limitů a ipcs -a a ipcs -m abyste viděli, co se používá, abyste mohli porovnat výstup. Podívejte se na nattch sloupec:existují segmenty bez připojených procesů, které nebyly odstraněny při ukončení procesů (což normálně znamená, že se program zhroutil)? ipcrm může je vymazat, i když pokud se jedná o testovací stroj, restart je rychlejší (a zajistí, že se vaše změny limitů zachytí).

Parametry vašeho jádra se zdají divné. Konkrétně shmall je počet stránek, nikoli bajtů, a 4 kB je výchozí velikost stránky (spustit getconf PAGESIZE zkontrolovat, co používáte). Kolik terabajtů RAM máš?

Nyní říkáte, že získáte asi 32 771 segmentů sdílené paměti, což je také asi 32 768 (nebo 2 až 15), což naznačuje, že omezujícím faktorem je podepsané 16bitové int. A jaké jádro používáte (protože to bude mít své vlastní limity)? Oba mohou souviset.

Řešení 2:

Ukázalo se, že shmmni je v jádře omezeno na 32768:

#define IPCMNI 32768  /* <= MAX_INT limit for ipc arrays (including sysctl changes) */

v souboru ...version.../include/linux/ipc.h .

Tolik k rekompilaci jádra, to je pevný limit pro počet segmentů sdílené paměti.


Linux
  1. Jak vytvořit nebo zvětšit swapový prostor v Linuxu

  2. Jak zvětšit odkládací prostor v Linuxu

  3. Příklady příkazů ipcs v Linuxu

  1. Jak používat sdílenou paměť s Linuxem v C

  2. Jak přistupovat (pokud je to možné) k prostoru jádra z uživatelského prostoru?

  3. Jak mmapovat vyrovnávací paměť linuxového jádra do uživatelského prostoru?

  1. Sdílená paměť Linuxu:shmget() vs mmap()?

  2. V zařízení nezbývá místo

  3. Jak zjistím, kolik volného místa zbývá na zařízení k vytvoření oddílu