Shmget вернуть ENOMEM с 12 ГБ бесплатно
Я пытаюсь выделить 22 МБ разделяемой памяти с помощью shmget(), но он завершается с ошибкой ENOMEM. Первые строки вывода top выглядят так, как будто было достаточно памяти:
Processes: 114 total, 4 running, 110 sleeping, 579 threads
Load Avg: 0.50, 0.42, 0.35 CPU usage: 0.24% user, 0.60% sys, 99.15% idle
SharedLibs: 17M resident, 5356K data, 0B linkedit.
MemRegions: 20375 total, 1361M resident, 59M private, 1176M shared.
PhysMem: 1487M wired, 1887M active, 576M inactive, 3950M used, 12G free.
VM: 286G vsize, 1052M framework vsize, 123007(0) pageins, 0(0) pageouts.
Программа работает с OS X версии 10.8.5. Есть идеи, в чем причина?
1 ответ
Следующие переменные sysctl влияют на общую память: kern.sysv.shmmax, kern.sysv.shmmin, kern.sysv.shmmni, kern.sysv.shmseg, kern.sysv.shmall. Здесь kern.sysv.shmall, как правило, следует установить на уровне аренды kern.sysv.shmmax, деленного на 4096.