Я уже писал, что использую в работе виртуальные машины, построенные с помощью VirtualBox. Несколько таких машин предназначены для написания программ на Java. При настройке этих машин в прошлом у меня возникала неприятная проблема: Java-машина начинала грузить процессор виртуалки на 100% при запуске java-приложения с gui интерфейсом, реализованном с использованием классов Swing. Тогда, а было это что-то около полутора-двух лет назад, я нашел в интернете несколько решений-подсказок, из которых, методом проб и ошибок, получил последовательность действий, которая искореняла проблему.
Недавно, однако, я поднимал очередную виртуалку для Java и столкнулся с проблемой опять. Втайне, в глубине души, я надеялся, что за прошедшее время разработчики VirtualBox исправили данную ошибку, ведь со всем, что связано с VirtualBox, произошло много изменений. Тут и смена владельца на Oracle, и крупные изменения в самом софте. Да и вряд ли я был единственным, кто столкнулся с этой ошибкой, ведь встретил же я на просторах интернета подсказки, помогшие ее обойти. Но... установка Java, запуск GUI приложения, написанного на Java, и 100% загрузка виртуального процессора.
Печаль же заключалось не в этом. Я помнил, что проблема была, помнил, как ее решить, но помнил в общих чертах, помнил, что на некоторых шагах должен сделать определенные действия, но конкретика стерлась из памяти за давностью, так сказать. И опять интенет, и опять пробы, и опять получилось, что не может не радовать. Только теперь я решил запротоколировать, на будущее, как решается данная проблема. Итак.
Дано: виртуальная машина, созданная с помощью VirtualBox. В опциях машины включено использование 2d и 3d ускорения графики, а на самой машине (Windows XP) установлены соответствующие компоненты из комплекта VBox Guest Additions с разрешением использовать для гостевой системы Direct3D. На виртуалке установлен Java SDK с последним набором обновлений.
Проблема: при запуске Java-программы, в которой используются Swing классы, процессор виртуальной машины оказывается загруженным на 100%. Виновник - процесс java.exe.
Причина: тут есть разночтения, но, в общих чертах, источник спрятан за использованием 3d графики.
Решение: чтобы избавиться от проблемы надо выполнить следующие шаги (сразу оговорюсь, некоторым товарищам по несчастью не требовался полный набор этих шагов, но мне помог именно такой алгоритм):
Уже после того, как я восстановил описанную выше последовательность, я нашел в интернете на форуме VirtualBox еще один метод решения проблемы, но, на текущий момент, у меня не было возможности его проверить. Метод заключается в том, что описывается системная переменная окружения
Вот, пожалуй и все по этому вопросу.
P.S. 14.11.2011. Вот и появилась причина вернуться к вопросу. На виртуалку с установленной поддержкой 3D, ставил LibreOffice, для работы которого нужен JRE. Так что пришлось ставить и JRE, причем, поставил версию 7 update 1. Одновременно ставится консоль и всяческие обновлятели Java. Через какое-то время использование процессора виртуалки подпрыгнуло до 100%. Смотрю процессы: вот он, родненький
Мораль: case sensitive рулит.
Недавно, однако, я поднимал очередную виртуалку для Java и столкнулся с проблемой опять. Втайне, в глубине души, я надеялся, что за прошедшее время разработчики VirtualBox исправили данную ошибку, ведь со всем, что связано с VirtualBox, произошло много изменений. Тут и смена владельца на Oracle, и крупные изменения в самом софте. Да и вряд ли я был единственным, кто столкнулся с этой ошибкой, ведь встретил же я на просторах интернета подсказки, помогшие ее обойти. Но... установка Java, запуск GUI приложения, написанного на Java, и 100% загрузка виртуального процессора.
Печаль же заключалось не в этом. Я помнил, что проблема была, помнил, как ее решить, но помнил в общих чертах, помнил, что на некоторых шагах должен сделать определенные действия, но конкретика стерлась из памяти за давностью, так сказать. И опять интенет, и опять пробы, и опять получилось, что не может не радовать. Только теперь я решил запротоколировать, на будущее, как решается данная проблема. Итак.
Дано: виртуальная машина, созданная с помощью VirtualBox. В опциях машины включено использование 2d и 3d ускорения графики, а на самой машине (Windows XP) установлены соответствующие компоненты из комплекта VBox Guest Additions с разрешением использовать для гостевой системы Direct3D. На виртуалке установлен Java SDK с последним набором обновлений.
Проблема: при запуске Java-программы, в которой используются Swing классы, процессор виртуальной машины оказывается загруженным на 100%. Виновник - процесс java.exe.
Причина: тут есть разночтения, но, в общих чертах, источник спрятан за использованием 3d графики.
Решение: чтобы избавиться от проблемы надо выполнить следующие шаги (сразу оговорюсь, некоторым товарищам по несчастью не требовался полный набор этих шагов, но мне помог именно такой алгоритм):
- глушим виртуалку, если она включена
- в опциях виртуальной машины отключаем использование ускорения 3d графики.
- загружаем виртуалку в Safe Mode (под администратором)
- деинсталлируем VBox Guest Additions (в каталоге установки, обычно,
%ProgramFiles%\Oracle\VirtualBox Guest Additions
, должен быть файлuninst.exe
) - перегружаемся в Safe Mode (под администратором)
- запускаем команду
sfc /scannow
- перегружаем виртуалку в обычном режиме
- устанавливаем VBox Guest Additions, но без включения галки использования Direct3D.
- наслаждаемся.
Уже после того, как я восстановил описанную выше последовательность, я нашел в интернете на форуме VirtualBox еще один метод решения проблемы, но, на текущий момент, у меня не было возможности его проверить. Метод заключается в том, что описывается системная переменная окружения
J2D_D3D
(якобы, эта переменная отвечает за использование в Java Direct3D), для которой устанавливается значение false
. Можно, также, использовать свойство d3d
, указывая в командной строке -Dsun.java2d.d3d=false
. Если установка свойства не помогает, попробовать указать свойство ddoffscreen
(установить значение false
), и , если опять не помогло, то noddraw
(установить значение true
). (Надо не забывать перед именами свойств указывать префикс sun.java2d
).Вот, пожалуй и все по этому вопросу.
P.S. 14.11.2011. Вот и появилась причина вернуться к вопросу. На виртуалку с установленной поддержкой 3D, ставил LibreOffice, для работы которого нужен JRE. Так что пришлось ставить и JRE, причем, поставил версию 7 update 1. Одновременно ставится консоль и всяческие обновлятели Java. Через какое-то время использование процессора виртуалки подпрыгнуло до 100%. Смотрю процессы: вот он, родненький
javaw.exe
, кушает все вычислительные ресурсы. Видно, Java Updater решил проверить наличие обновлений. Ладно, срубил. Установил системную переменную J2D_D3D
в значение False
. Запускаю консоль Java из панели управления - загрузка 100%. Неужели не работает? Меняю значение переменной на false
, запускаю Java-машину - работает, не жрет процессорное время.Мораль: case sensitive рулит.
Комментариев нет:
Отправить комментарий