Установить ограничение памяти по умолчанию для всех апплетов

Укороченная версия

Как мне сконфигурировать пакет icedtea-plugin для ubuntu точно так, чтобы он по умолчанию выполнял все апплеты с определенным ограничением памяти? Желательно использовать инструменты командной строки и без графического интерфейса пользователя.

Длинная версия

Я строю установку киоска с использованием Java-апплетов и хотел бы увеличить ограничение памяти по умолчанию для всех этих апплетов. Киоск основан на Ubuntu Linux, используя пакет icedtea-plugin в качестве плагина для браузера. Поскольку сборка киоска автоматизирована и без заголовка, я бы предпочел настроить его из командной строки, если это возможно.

Вот что я узнал до сих пор:

  • Мне, вероятно, придется указать -Xmx… Аргумент командной строки, который будет использоваться при запуске виртуальной машины Java для плагина.
  • Можно передать такие аргументы, используя параметр в коде HTML, т.е. <param name="java_arguments" value="-Xmx…">, Но это будет означать изменение всех моих HTML-файлов, которых я бы предпочел избежать. И есть большая вероятность, что мне придется подписать свой код, чтобы сделать эту работу, что добавляет довольно много проблем в других местах моего проекта.
  • На моей настольной системе, использующей Oracle VM, есть приложение ControlPanel который я могу использовать для установки этих ключей командной строки. Похоже, что конфигурация записывается в файл ~/.java/deployment/deployment.properties где это связано с ключом deployment.javaws.jre.0.args,
  • Это имя ключа не описано в спецификации для этого файла. Число 0 кажется, относится к одной конкретной JVM, представленной в одной строке таблицы на панели управления. Для каждой JVM есть несколько значений, кроме этого args значение, все с общим индексом.
  • Согласно этому разделу вики, IcedTea поддерживает аналогичный файл, расположенный по адресу ~/.icedtea/, Не уверен, означает ли это ~/.icedtea/deployment.properties или скорее ~/.icedtea/deployment/deployment.properties, IcedTea, похоже, не идет с ControlPanel,

Как вы можете видеть, есть много подсказок относительно того, как это может работать, но до сих пор я не видел никакого определенного ответа относительно того, что будет работать. Есть еще много открытых вопросов:

  • Нужно ли создавать этот файл развертывания icedtea?
  • Нужно ли включать каталог с именем deployment в пути?
  • Какой минимальный набор ключей мне нужно указать, чтобы этот файл работал должным образом?
  • Это args значение даже поддерживается OpenJDK, даже если оно не описано в соответствующей спецификации?

Я думаю, что я мог бы попробовать все возможные комбинации, чтобы увидеть, работает ли одна из них, но это займет значительное время. Итак, я спрашиваю здесь, чтобы посмотреть, есть ли у кого-то опыт в этом, и может ли дать ответ подавляющий. Если нет, я думаю, что в конце концов отвечу на свой вопрос, как только попробую.

2 ответа

Решение

Я только что посмотрел на исходный код плагина icedtea-web. Часть кода, которая строит командную строку, похоже, вообще не предусматривает включение пользовательских аргументов, независимо от их происхождения. Поэтому не имеет значения, какие конфигурационные файлы, HTML-файлы или переменные среды я редактирую, код будет создавать ту же командную строку для вызова java, игнорируя все мои пожелания.

Так что, если все настройки не удастся, то остается взломать. Один из подходов заключается в исправлении исходного кода плагина и включении в него дополнительных слов в командной строке. Для статического сложения, то есть для одного изменения размера, это было бы довольно просто. Более общее исправление будет включать в себя содержание некоторой переменной среды, как предполагает ответ Питера. Это будет означать разбиение слов по рассматриваемой переменной среды и динамическое выделение пространства для массива слов. Довольно много работы на уровне C.

В качестве альтернативы можно заняться этим на уровне исполняемого двоичного файла. Плагин, очевидно, имеет жестко запрограммированный путь к исполняемому файлу. В моем случае этот путь /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java, Можно переименовать этот двоичный файл в java.origи поместите на его место скрипт оболочки со следующим содержимым:

#!/bin/bash
for i in "$@"; do
  if [[ "${i}" == sun.applet.PluginMain ]]; then
    exec "$0.orig" -Xmx512m "$@"
  fi
done
exec "$0.orig" "$@"

Одним из следствий этого подхода является тот факт, что ps больше не будет печатать эти апплеты как java но вместо этого как java.orig, Не должно быть проблемой в большинстве случаев.

Как говорит оракул: http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html.

следующая переменная окружения должна быть установлена ​​для добавления дополнительных аргументов к апплетам:

_JPI_VM_OPTIONS=-Xmx…

Более того, как говорится на реферируемом сайте:

Обратите внимание, что вам необходимо перезапустить браузер после установки переменной среды. Если вы устанавливаете эту переменную среды в командной оболочке, то вы должны использовать ту же командную оболочку для запуска браузера, чтобы браузер наследовал значение переменной среды.

Однако, если вы сомневаетесь в том, как установить переменную среды в Ubuntu, может пригодиться следующий пост: Сделайте $JAVA_HOME легко изменяемым в Ubuntu.

Другие вопросы по тегам