OpenCPU - не удалось установить rlimit. ENOSYS
Я уже установил OpenCPU на Ubuntu Server - 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)
Сервер имеет только 1 ГБ физической памяти, поэтому я подумал, что изменение "rlimit.as" на 1e9 вместо стандартного 2e9 решит проблему (я также попробовал 750000000 и 500000000), но ничего не помогло (конечно, я перезапустил службу opencpu снова после каждого изменения). Я также думаю, что это не проблема, потому что я предполагаю, что сервер будет использовать виртуальную память, когда операция использует более одного ГБ. Я думаю, что проблема связана с RAppArmor. Поэтому я попытался отключить его и перезапустить opencpu, но проблема не исчезла:
$ sudo aa-disable 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: 'Предупреждение: невозможно найти подходящий fs в /proc/mounts, он смонтирован?\ N Используйте --subdomainfs для переопределения.\ N'
Так кто-нибудь знает, в чем может быть проблема, или есть какие-либо предложения, где искать решение (я уже пытался гуглить, но не нашел ничего полезного)?
Я не думаю, что что-то из следующего является причиной проблемы, но так как я не уверен, я все равно добавляю эти предупреждения:
Единственное странное, с чем я столкнулся во время установки 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: warning: Пожалуйста, убедитесь, что ваши языковые настройки: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = (unset) поддерживаются и установлены в вашей системе. perl: warning: возврат к стандартной локали ("C"). locale: Невозможно установить LC_CTYPE в качестве локали по умолчанию: Нет такого файла или каталога. Языковой стандарт: Невозможно установить LC_ALL в качестве локали по умолчанию: Нет такого файла или каталога. Выбор ранее невыбранного пакета r-cran-rapparmor.
А также этот:
Предупреждение: не удается найти подходящий fs в /proc/mounts, он смонтирован?\ N Используйте --subdomainfs для переопределения.\ N
Заранее спасибо!
1 ответ
Похоже, ваш новый хостинг-провайдер использует какую-то систему виртуализации с общим ядром, которая ограничивает все виды функциональных возможностей linux, включая rlimit, iptables и, возможно, apparmor. Это настоящий облачный хост или что-то, что вы сами настраиваете?
Было бы полезно отладить это в R (за пределами opencpu). На вашем сервере запустите R в консоли и введите:
library(RAppArmor, lib="/usr/lib/opencpu/library")
rlimit_as(1e9)
rlimit_fsize(1e9)
rlimit_cpu(1e5)