Сегодня я понял проблему, наконец-то я понял. Это из-за selinux, так что просто выключите selinux, и включите его после запуска системы. Это работает на меня, вы можете попробовать :)
sudo vim /etc/selinux/config
SELINUX=permissive
vim /etc/rc.d/rc.local
setenforce 1
На первый взгляд единственное, что я могу придумать, это то, что где-то по ходу строки обработка (системой) файла cgconfig.conf стала более строгой. Что произойдет, если вы удалите кавычки, вместо того, чтобы определять пределы в виде строки в кавычках. Примерно так:
group memtest {
memory {
memory.limit_in_bytes = 209715200;
memory.soft_limit_in_bytes = 104857600;
}
}
После размышлений я думаю, что memory.limit_in_bytes ограничивает только физическую память пользователя, но позволяет использовать подкачку. Возможно ли, что все, что вам нужно сделать, это установить memory.memsw.limit_in_bytes
на то же значение, что и memory.limit_in_bytes
, например:
group memtest {
memory {
memory.limit_in_bytes = 209715200;
memory.memsw.limit_in_bytes = 209715200;
memory.soft_limit_in_bytes = 104857600;
}
}
memory.memsw.limit_in_bytes включает пользователя память и своп. Поэтому, если вам нужно 0 места подкачки, необходимо установить memory.memsw.limit_in_bytes
равным memory.limit_in_bytes
Когда вы выполняете ulimit -S -v 200000
, что ограничивает виртуальной памяти (подкачки, общие данные И физическая оперативная память) на определенное количество, чтобы вашему приложению не хватило места. Однако обычные системные настройки, которые у вас были, не ограничивали пространство подкачки, поэтому, вероятно, у него было достаточно места для использования максимальной пользовательской памяти + плюс неиспользуемое пространство подкачки.
Если бы вы отключили подкачку (и не использовали ulimit) до проведения ваших тестов, я бы ожидал, что ваша программа не смогла бы выделить запрошенную память.