Как объясняет man 2 mlockall, у вас, похоже, нет прав для блокировки суммы памяти, которую вы пытались заблокировать. Вы можете либо настроить это ограничение, либо попробовать запустить свою программу от имени пользователя root, например. через sudo
. Я не рекомендую делать последнее для чего-либо, кроме как выяснить, действительно ли ограничения являются проблемой, поэтому вот как настроить ограничения для bash на Kubuntu — это может работать по-другому в вашем дистрибутиве.
Во-первых, давайте посмотрим, каков ваш предел:
$ ulimit -a | grep locked
max locked memory (kbytes, -l) 64
64 Кб это не много! Для этого тоже есть сокращение:
$ ulimit -l
64
Скорее всего, вы не сможете легко настроить лимит:
$ ulimit -l 1000000
bash: ulimit: max locked memory: cannot modify limit: Operation not permitted
И даже если бы вы были, это не сохранялось бы при вызовах оболочки, перезагрузках и т. Д. Поэтому нам нужен другой подход.
/etc/security/limits.conf
на помощь! Это файл, из которого считываются значения ограничений по умолчанию при запуске сеанса пользователя — см. man 5 limit.conf.
Добавьте следующую строку (nobss
— это мое имя пользователя, вы, очевидно, должны использовать свое)
nobss - memlock 1000000
в файл, чтобы установить жесткие и мягкие ограничения в 1000000 кбайт. Выйдите из системы и войдите в систему, и вуаля:
$ $ ulimit -l
1000000
Так-то лучше. Если ваша программа не использует кучу памяти, это ограничение должно подойти - на самом деле в большинстве случаев этого более чем достаточно.
person
Sam Nobs
schedule
22.03.2019
Can't find a source file at "/build/glibc-p3Km7c/glibc-2.24/io/../sysdeps/unix/syscall-template.S" Locate the file or edit the source lookup path to include its location.
для другой проблемы, только когда я запускаю встроенную программу из IDE в режиме отладки. Из консоли работает. Так что, похоже, это связано только с конфигурацией IDE, а не с нашими приложениями. - person lalebarde   schedule 27.04.2018