Я пытаюсь настроить Atlassian Fisheye/Crucible как сервис на Win 2K3 R2 уже две недели. Я постоянно получаю различные ошибки "java.lang.OutOfMemoryError: PermGen space", которые приводят к сбою Fisheye и заставляют меня перезапускать сервис.
Я следил запримерна сайте поддержки Atlassian для настройки MaxPermSize в оболочке сервиса. Однако, когда я проверяю SysInfo на страницах Fisheye Admin и в журнале отладки, я не вижу никаких подтверждений. Информация о Java Heap есть в обоих местах, поэтому я ожидаю, что настройка MaxPermSize будет отображаться в обоих местах.
Ошибка сохраняется, а служба поддержки Atlassian не оказала никакой помощи.
Я буду признателен за любую помощь.
решение1
Вы можете установить это в вашем файле Wrapper.conf. Вот мой файл конфигурации, и он отлично работает для меня, я использую его с Fisheye 2.6.3, работающим на Windows Server 2008 R2. Этот файл в основном идентичен образцу/конфигурации по умолчанию, с несколькими важными дополнениями, которые я прокомментирую в конце.
#********************************************************************** # Свойства оболочки #********************************************************************** # Рабочий каталог обертка.рабочая.дир=../../ # Java-приложение wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe # Основной класс Java. Этот класс должен реализовывать интерфейс WrapperListener # или гарантировать, что класс WrapperManager инициализирован. Helper # классов предоставлены для этого. Смотрите раздел Интеграция # документации для получения подробной информации. wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper # Java Classpath (включая wrapper.jar) Добавьте элементы пути к классам как # необходимо начинать с 1 (добавьте lib ПЕРВЫМ, чтобы конфигурация log4j загружалась первой) wrapper.java.classpath.1=./fisheyeboot.jar wrapper.java.classpath.2=wrapper/lib/*.jar # Путь к библиотеке Java (расположение Wrapper.DLL или libwrapper.so) wrapper.java.library.path.1=wrapper/lib wrapper.java.library.path.2=lib/native/linux-i386 wrapper.java.library.path.3=lib/native/osx-ppc wrapper.java.library.path.4=lib/native/solaris-sparc wrapper.java.library.path.5=lib/native/win32-x86 # Дополнительные параметры Java wrapper.java.additional.1=-сервер wrapper.java.additional.2=-showversion wrapper.java.additional.3=-Djava.awt.headless=true # JDK 1.5 Дополнительные параметры для jmx wrapper.java.additional.4=-Dcom.sun.management.jmxremote wrapper.java.additional.5=-Dcom.sun.management.jmxremote.port=4242 wrapper.java.additional.6=-Dcom.sun.management.jmxremote.authenticate=false wrapper.java.additional.7=-Dcom.sun.management.jmxremote.ssl=false wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false wrapper.java.additional.9=-Dcom.sun.management.jmxremote.password.file=./wrapper/jmxremote.password wrapper.java.additional.10=-Dwrapper.mbean.name="wrapper:type=Управление оберткой службы Java" wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin\.." wrapper.java.additional.12=-XX:MaxPermSize=256m обертка.java.additional.13=-Xrs wrapper.java.additional.14=-Dfile.encoding=UTF-8 # Начальный размер кучи Java (в МБ) обертка.java.initmemory=64 # Максимальный размер кучи Java (в МБ) обертка.java.maxmemory=1024 # Параметры приложения. Добавляйте параметры по мере необходимости, начиная с 1 # Первый параметр приложения — это имя класса, основной # метод должен быть вызван при запуске приложения. Класс # за именем следует количество параметров, которые будут переданы его основному # метод. Затем идут фактические параметры. wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl параметр.приложения.обертки.2=1 wrapper.app.parameter.3=start # За параметрами запуска следует имя класса, основной # метод должен быть вызван для остановки приложения. Имя класса остановки # сопровождается флагом, который контролирует, должен ли Wrapper # дождаться завершения всех потоков, не являющихся демонами, перед выходом из JVM. # За флагом следует количество параметров, которые необходимо передать # останавливаем основной метод класса. Наконец, идут фактические параметры. wrapper.app.parameter.4=com.cenqua.fisheye.FishEyeCtl обертка.приложения.параметр.5=истина параметр.приложения.обертки.6=1 wrapper.app.parameter.7=стоп #********************************************************************** # Свойства ведения журнала оболочки #********************************************************************** # Формат вывода для консоли. (Форматы см. в документации) обертка.консоль.формат=M # Уровень журнала для вывода на консоль. (Уровни журнала см. в документации) wrapper.console.loglevel=ИНФОРМАЦИЯ # Файл журнала, используемый для регистрации выходных данных оболочки. файл_журнала_обертки=var/log/wrapper.log # Формат вывода для файла журнала. (Форматы см. в документации) wrapper.logfile.format=LPTM # Уровень журнала для вывода файла журнала. (Уровни журнала см. в документации) wrapper.logfile.loglevel=ИНФОРМАЦИЯ # Максимальный размер, до которого может вырасти файл журнала, прежде чем # журнал сворачивается. Размер указывается в байтах. Значение по умолчанию # из 0, отключает прокрутку журнала. Может быть сокращено до 'k' (kb) или # Суффикс 'm' (мб). Например: 10м = 10 мегабайт. wrapper.logfile.maxsize=50m # Максимальное количество свернутых файлов журнала, которое будет разрешено до старого # файлов удалено. Значение по умолчанию 0 подразумевает отсутствие ограничений. wrapper.logfile.maxfiles=10 # Уровень журнала для вывода журнала sys/event. (Уровни журнала см. в документации) wrapper.syslog.loglevel=НЕТ #********************************************************************** # Свойства оболочки Windows #********************************************************************** # Название для использования при запуске в качестве консоли wrapper.console.title=Рыбий глаз #********************************************************************** # Свойства службы оболочки Windows NT/2000/XP #********************************************************************** # ВНИМАНИЕ! Не изменяйте ни одно из этих свойств, когда приложение # использование этого файла конфигурации было установлено как служба. # Пожалуйста, удалите службу перед изменением этого раздела. # затем службу можно переустановить. # Название услуги wrapper.ntservice.name=Рыбий глаз # Отображаемое имя сервиса wrapper.ntservice.displayname=Рыбий глаз # Описание услуги wrapper.ntservice.description=Рыбий глаз # Зависимости сервиса. Добавляйте зависимости по мере необходимости, начиная с 1 wrapper.ntservice.dependency.1= # Режим, в котором установлена служба. AUTO_START или DEMAND_START wrapper.ntservice.starttype=AUTO_START # Разрешить службе взаимодействовать с рабочим столом. wrapper.ntservice.interactive=false
Примечательные строки
wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe
Полный путь к исполняемому файлу сервера JDK 'hotspot'. Обратите внимание, что нужно загрузить полный JDK, а не только JRE.
wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin.."
wrapper.java.additional.12=-XX:MaxPermSize=256m
wrapper.java.additional.13=-Xrs
wrapper.java.additional.14=-Dfile.encoding=UTF-8
Ничего из вышеперечисленного не показано в документации Atlassian, я добавил их со временем методом проб и ошибок. Когда FeCru впервые запускается под оболочкой сервиса, он может остановиться с ошибкой нехватки памяти, строка 'MaxPermSize' исправляет это.
Я также обнаружил, что необходимо указать FISHEYE_INST, как показано выше. Я понятия не имею, почему путь указан с /..
на конце, в примере, который я нашел, было так. Какой-то ритуал куки-линукса, без сомнения. Другие строки, я не могу вспомнить, для чего они были, но я добавил их по какой-то причине и не задокументировал, почему. Никто не идеален ;-)
обертка.java.initmemory=64 обертка.java.maxmemory=1024
Выделение памяти кучи увеличилось по сравнению со значениями по умолчанию — я индексирую несколько довольно объемных репозиториев и могу позволить себе дополнительные ресурсы — вам, возможно, подойдут меньшие выделения по умолчанию.