2011-02-01 3 views
4

Я заметил, что выполнение больших тестовых наборов Junit 3.x приводит к тому, что Eclipse дерутся и блокируются. Даже когда я выделяю много кучи и perm gen (1200 м и 400 м), он гудит вдоль, а затем просто замерзает, а затем продолжает, занимая довольно много времени. Если я запускаю тесты небольшими партиями, тогда все довольно быстро, и замораживание в значительной степени никогда не произойдет.Запуск много тестов заставляет Eclipse замораживаться, продолжать замораживание и т. Д.

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

Кто-нибудь есть советы по как обойти это.

+1

Вы пробовали сначала этот 'eclipse.ini'? http://stackoverflow.com/questions/142357/what-are-the-best-jvm-settings-for-eclipse/3275659#3275659 – VonC

+0

Да, я сказал, что значения очевидных причин недостаточны для кучи и perm gen. Они достаточно большие ... –

+0

@mP: но «eclipse.ini», о котором я упоминал, касается не только размера кучи и perm gen. Это точная комбинация опций, которая заставляет Eclipse работать плавно на наших рабочих станциях. – VonC

ответ

0

Не разрешено комментировать и, следовательно, добавление его здесь .. вы проверили память, поэтому этот вариант закрыт

Несколько других вещей, чтобы попробовать:

Я не уверен, если вы пробовали играть с опции fork на junit.

Пересоздание целевых классов снова и снова? Можете ли вы посмотреть целевую папку?

Вы пытались воссоздать рабочее пространство? Просто предлагаю это, потому что вы, похоже, рассмотрели основные проблемы: память, каротаж и т. Д.

+0

Воспроизводимая рабочая область -yes. Id скорее избегайте запуска junit через ant, чтобы использовать вилку, которая замедляла бы вещи еще больше, избегая, вероятно, замораживания. –

3

Возможно, это уже было что-то, что вы пробовали, но ... если вы используете свои модульные тесты как «JUnit plug-in tests». .. то ваши настройки для Xmx и MaxPermSize в eclispe.ini бесполезны.

Настройки eclipse.ini позволяют изменять настройки для текущего Eclipse. Любой экземпляр Eclipse, созданный из этого Eclipse, по-прежнему будет иметь настройки по умолчанию (что-то вроде Xms40m и Xmx512m). Вы также должны изменить их.

Откройте конфигурацию запуска, которую вы используете для своих тестов («Выполнить> Запустить конфигурации ...», выберите ту, которую вы используете для запуска модульных тестов) и перейдите на вкладку «Аргументы». Там, в текстовой области «Аргументы VM», введите новые параметры памяти, как в файле eclipse.ini (я использую -Xms256m -Xmx1536m -XX:MaxPermSize=256m для самых дорогих наборов тестов ... но вам может понадобиться больше).

Основная проблема, хотя, возможно, заключается в попытке исправить потенциальные утечки памяти ваших модульных тестов. Вы уверены, что у вас больше нет разгрузки/освобождения памяти/... в tearDown()? Выполнение тестов при профилировании может помочь (мы используем профилировщик Mykit java для этой цели, где я работаю ... но это не бесплатно. JConsole может вам помочь, см. Также http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html).

+0

Они не работают как тесты плагина, и да, настройки, упомянутые в q, - это настройки виртуальной машины, используемые для самой тестовой пусковой установки JUNIT. –

+0

Тогда все, о чем я могу думать, это либо утечка памяти (которая просто заполнит вашу кучу независимо от ваших настроек), либо мертвую блокировку. Я могу только рекомендовать вам профилировать свои модульные тесты, чтобы узнать, какие объекты есть всю вашу память, или запустить его в режиме отладки и «приостановить» все это через некоторое время, чтобы попытаться определить, происходит ли тупик в каком-то месте. – Kellindil

0

В вашей программе может быть какая-то утечка памяти, которая появляется только в том случае, если вы запускаете все тесты. Вы не упомянули, если у вас возникают те же проблемы, если вы запускаете свои тесты извне.

Я бы рекомендовал запустить какой-то анализатор памяти во время замораживания. Что-то вроде MAT http://www.eclipse.org/mat/ помогло мне в прошлом. Вы также можете попробовать запустить несколько сеансов jstack, чтобы получить представление о том, что происходит с течением времени.