Установить ограничение памяти по умолчанию для всех апплетов
Укороченная версия
Как мне сконфигурировать пакет 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.