Ř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.