Ubuntu mlockall():无法分配内存

Ubuntu mlockall():无法分配内存,ubuntu,preempt-rt,Ubuntu,Preempt Rt,我得到一个错误: mlockall失败:无法分配内存 调用函数mlockall()时: 使用的IDE:Eclipse 操作系统:Ubuntu 16.04 实时扩展使用:4.11.12 rt-15(抢占补丁) 注意:我正在尝试实时创建UDP连接(使用intel i210以太网控制器) 当我在eclipse中调试相同的程序时,将显示以下内容: 在“/build/glibc-bfm8X4/glibc-2.23/misc/。/sysdeps/unix/syscall template.S”中找不到源文件

我得到一个错误: mlockall失败:无法分配内存 调用函数mlockall()时:

使用的IDE:Eclipse 操作系统:Ubuntu 16.04 实时扩展使用:4.11.12 rt-15(抢占补丁) 注意:我正在尝试实时创建UDP连接(使用intel i210以太网控制器)

当我在eclipse中调试相同的程序时,将显示以下内容:

在“/build/glibc-bfm8X4/glibc-2.23/misc/。/sysdeps/unix/syscall template.S”中找不到源文件 找到文件或编辑源查找路径以包含其位置

如何解决此问题?

如前所述,您似乎没有权限锁定尝试锁定的内存量。您可以调整该限制,或者尝试以root用户身份运行程序,例如通过
sudo
。除了找出限制是否真的是问题所在之外,我不建议做后一种方法,因此下面是如何调整bash on Kubuntu的限制-它可以在您的发行版上以不同的方式工作

首先,让我们看看您的限制是什么:

$ ulimit -a | grep locked
max locked memory       (kbytes, -l) 64
64KB不是很多!这里也有一个速记:

$ ulimit -l
64
您很可能无法轻松调整限制:

$ ulimit -l 1000000
bash: ulimit: max locked memory: cannot modify limit: Operation not permitted
即使是这样,它也不会在shell调用、重新启动等过程中保持不变,因此我们需要一种不同的方法

/etc/security/limits.conf
救援!这是启动用户会话时读取限制默认值的文件-请参阅

添加以下行(
nobss
是我的用户名,显然,您应该使用您的用户名)

将硬限制和软限制设置为1000000 KB。注销并登录,然后瞧:

$ $ ulimit -l
1000000

那更好。除非您的程序使用大量内存,否则这个限制应该可以做到——事实上在大多数情况下已经足够了。

我有一个问题:
在“/build/glibc-p3Km7c/glibc-2.24/io/。/sysdeps/unix/syscall template.s”中找不到源文件,或者编辑源查找路径以包含其位置。
对于另一个问题,仅当我在调试模式下从IDE执行构建的程序时。从控制台,它可以工作。因此,它似乎只与IDE配置有关,而与我们的应用程序无关
nobss - memlock 1000000
$ $ ulimit -l
1000000