【问题标题】:OpenCPU - Failed to set rlimit. ENOSYSOpenCPU - 设置 rlimit 失败。 ENOSYS
【发布时间】:2014-10-11 18:03:15
【问题描述】:

我已经在 Ubuntu 服务器上安装了 OpenCPU - Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64) - 一切运行良好,没有任何问题。 在这里,我想说我真的很喜欢这个 API,我非常感谢从事它的人们(我认为主要是 Jeroen Ooms)所做的所有努力。 现在我再次安装它,但在另一个提供商托管的另一个服务器上。它也是一个 Ubuntu 服务器 - Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-042stab093.4 x86_64) - 因此我希望它能够像以前一样顺利运行。 但现在我有一个问题。安装并启动服务后,我想通过浏览器检查一切是否正常。 所以我只是打开了http://xxx.xxx.xxx.xxx/ocpu,就像它在我的其他服务器上一样。这次我的浏览器没有显示 OpenCPU API Explorer,而是显示以下消息:

Failed to set rlimit. ENOSYS

In call:
rlimit_wrapper("rlimit_as", hardlim, softlim, pid, verbose)

服务器只有 1GB 的物理内存,所以我认为将“rlimit.as”更改为 1e9 而不是标准的 2e9 可以解决问题(我也尝试了 750000000 和 500000000),但没有任何帮助(当然我重新启动了每次更改后再次服务opencpu)。 我也认为这不是问题,因为我猜当操作使用超过 1 GB 时服务器会使用虚拟内存。 我认为问题与 RAppArmor 有关。所以我尝试禁用它并重新启动opencpu,但问题并没有消失:

$ sudo aa-禁用 usr.bin.r 禁用 /etc/apparmor.d/usr.bin.r。 回溯(最近一次通话最后): 文件“/usr/sbin/aa-disable”,第 30 行,在 tool.cmd_disable() 文件“/usr/lib/python3/dist-packages/apparmor/tools.py”,第 148 行,在 cmd_disable 中 引发 apparmor.AppArmorException(cmd_info[1]) apparmor.common.AppArmorException: '警告:无法在 /proc/mounts 中找到合适的 fs,是否已安装?\n使用 --subdomainfs 覆盖。\n'

那么有谁知道这里的问题可能是什么,或者有什么建议可以在哪里寻找解决方案(我已经尝试 google,但没有发现任何有用的信息)?

我认为以下任何原因都不是问题的原因,但由于我不确定,我还是添加了这些警告:

我在安装 OpenCPU 的过程中遇到的唯一奇怪的事情就是这个消息(出现了 4 次):

iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

但后来却说:

 * Reloading nginx configuration nginx          [ OK ]
OK
Setting up opencpu (1.4.4-trusty15) ...

另外,当我尝试单独安装 RAppArmor 时,我收到以下警告:

perl: 警告:请检查您的语言环境设置: 语言=(未设置), LC_ALL =(未设置), LC_CTYPE = "UTF-8", LANG =(未设置) 支持并安装在您的系统上。 perl:警告:回退到标准语言环境(“C”)。 语言环境:无法将 LC_CTYPE 设置为默认语言环境:没有这样的文件或目录 语言环境:无法将 LC_ALL 设置为默认语言环境:没有这样的文件或目录 选择以前未选择的包 r-cran-rapparmor。

还有这个:

警告:在 /proc/mounts 中找不到合适的 fs,是否已安装?\n使用 --subdomainfs 覆盖。\n

提前致谢!

【问题讨论】:

    标签: r opencpu apparmor


    【解决方案1】:

    看起来您的新托管服务提供商使用某种具有共享内核的虚拟化系统,该内核限制了所有类型的 linux 功能,包括 rlimit、iptables 和可能的 apparmor。是实际的云主机,还是您自己设置的?

    在 R(opencpu 之外)中调试它会很有帮助。在您的服务器上,在控制台中启动 R 并键入:

    library(RAppArmor, lib="/usr/lib/opencpu/library")
    rlimit_as(1e9)
    rlimit_fsize(1e9)
    rlimit_cpu(1e5)
    

    【讨论】:

    • Jeroen,感谢您的快速回复,您太棒了!您是对的,我们的托管服务提供商使用某种具有共享内核的虚拟化。在完全移除 AppArmor 并重新安装 OpenCPU 后,它现在可以工作了。但我不确定现在我们在没有 AppArmor 的情况下运行 OpenCPU 会面临什么危险。我们可以做些什么来降低风险?您能否指出一些资源,在那里我可以了解有关此问题的更多信息?
    • 您可能不应该在没有安全性的情况下将您的服务器暴露给外界。但是内部使用没问题。你知道你的主机使用什么样的 vm 环境吗?如今,几乎所有现代托管服务提供商都使用 kvm、xen 或 openstack,它们都不使用共享内核。
    猜你喜欢
    • 2010-09-21
    • 2023-03-23
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多