Como defino "MaxPermSize" para Atlassian Fisheye/Crucible rodando como serviço no Win2k3?

Como defino "MaxPermSize" para Atlassian Fisheye/Crucible rodando como serviço no Win2k3?

Estou tentando configurar o Atlassian Fisheye/Crucible como um serviço no Win 2K3 R2 há duas semanas. Continuo recebendo vários erros "java.lang.OutOfMemoryError: PermGen space", que travam o Fisheye e me forçam a reiniciar o serviço.

Eu segui oexemplono site de suporte da Atlassian para configurar MaxPermSize no wrapper de serviço. No entanto, quando verifico o SysInfo nas páginas do Fisheye Admin e no log de depuração, não vejo nenhuma confirmação. As informações do Java Heap estão em ambos os lugares, então espero que a configuração MaxPermSize apareça em ambos os lugares.

O erro persiste e o suporte da Atlassian tem ajudado pouco.

Agradeço qualquer ajuda.

Responder1

Você pode definir isso em seu arquivo Wrapper.conf. Aqui está meu arquivo de configuração e está funcionando muito bem para mim. Estou usando-o com o Fisheye 2.6.3 em execução no Windows Server 2008 R2. Este arquivo é praticamente idêntico à configuração sample/default, com algumas adições importantes que comentarei no final.

#************************************************* *******************
# Propriedades do wrapper
#************************************************* *******************
# Diretório de trabalho
wrapper.working.dir=../../

# Aplicativo Java
wrapper.java.command=C:\Arquivos de programas\Java\jdk1.6.0_25\bin\java.exe

# Classe principal Java. Esta classe deve implementar a interface WrapperListener
# ou garanta que a classe WrapperManager seja inicializada. Ajudante
# aulas são fornecidas para fazer isso para você. Veja a seção Integração
# da documentação para detalhes.
wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper

# Java Classpath (inclui wrapper.jar) Adicione elementos do caminho de classe como
# necessário começar em 1 (adicionar lib FIRST para que a configuração do log4j seja carregada primeiro)
wrapper.java.classpath.1=./fisheyeboot.jar
wrapper.java.classpath.2=wrapper/lib/*.jar

# Caminho da biblioteca Java (localização de Wrapper.DLL ou 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


# Parâmetros Adicionais Java
wrapper.java.additional.1=-servidor
wrapper.java.additional.2=-showversão
wrapper.java.additional.3=-Djava.awt.headless=true

# Parâmetros adicionais do JDK 1.5 para 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=Controle de wrapper de serviço Java"
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


# Tamanho inicial do heap Java (em MB)
wrapper.java.initmemory=64

# Tamanho máximo de heap Java (em MB)
wrapper.java.maxmemory=1024

# Parâmetros do aplicativo. Adicione parâmetros conforme necessário a partir de 1
# O primeiro parâmetro da aplicação é o nome da classe cujo principal
# método deve ser chamado quando o aplicativo for iniciado. A classe
# nome é seguido pelo número de parâmetros a serem passados ​​para seu principal
# método. Depois vêm os parâmetros reais.

wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl
wrapper.app.parameter.2=1
wrapper.app.parameter.3=iniciar

# Os parâmetros de início são seguidos do nome da classe cujo principal
# método deve ser chamado para interromper o aplicativo. O nome da classe de parada
# é seguido por um sinalizador que controla se o Wrapper deve ou não
# espere que todos os threads não-daemon sejam concluídos antes de sair da JVM.
# A flag é seguida pelo número de parâmetros a serem passados ​​para o
# interrompe o método principal da classe. Finalmente vêm os parâmetros reais.
wrapper.app.parameter.4=com.cenqua.fisheye.FishEyeCtl
wrapper.app.parameter.5=true
wrapper.app.parameter.6=1
wrapper.app.parameter.7=parar

#************************************************* *******************
# Propriedades de registro do wrapper
#************************************************* *******************
# Formato de saída para o console. (Veja a documentação para formatos)
wrapper.console.format=M

# Nível de log para saída do console. (Veja a documentação para níveis de log)
wrapper.console.loglevel=INFO

# Arquivo de log a ser usado para registro de saída do wrapper.
wrapper.logfile=var/log/wrapper.log

# Formato de saída do arquivo de log. (Veja a documentação para formatos)
wrapper.logfile.format=LPTM

# Nível de log para saída do arquivo de log. (Veja a documentação para níveis de log)
wrapper.logfile.loglevel=INFO

# Tamanho máximo que o arquivo de log poderá crescer antes
# o log é rolado. O tamanho é especificado em bytes. O valor padrão
# de 0, desativa a rolagem de log. Pode abreviar com o 'k' (kb) ou
# Sufixo 'm' (mb). Por exemplo: 10m = 10 megabytes.
wrapper.logfile.maxsize=50m

# Número máximo de arquivos de log rolados que serão permitidos antes do antigo
# arquivos foram excluídos. O valor padrão de 0 não implica nenhum limite.
wrapper.logfile.maxfiles=10

# Nível de log para saída de log de sys/evento. (Veja a documentação para níveis de log)
wrapper.syslog.loglevel=NONE

#************************************************* *******************
# Propriedades do wrapper do Windows
#************************************************* *******************
# Título a ser usado ao executar como console
wrapper.console.title=Olho de peixe

#************************************************* *******************
# Propriedades do serviço Wrapper Windows NT/2000/XP
#************************************************* *******************
# AVISO - Não modifique nenhuma dessas propriedades quando um aplicativo
# usando este arquivo de configuração foi instalado como um serviço.
# Desinstale o serviço antes de modificar esta seção. O
# serviço pode então ser reinstalado.

#Nome do serviço
wrapper.ntservice.name=Olho de peixe

#Exibe o nome do serviço
wrapper.ntservice.displayname=Olho de peixe

#Descrição do serviço
wrapper.ntservice.description=Olho de peixe

# Dependências de serviço. Adicione dependências conforme necessário a partir de 1
wrapper.ntservice.dependency.1=

# Modo em que o serviço está instalado. AUTO_START ou DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Permita que o serviço interaja com a área de trabalho.
wrapper.ntservice.interactive=falso

Linhas notáveis

wrapper.java.command=C:\Arquivos de programas\Java\jdk1.6.0_25\bin\java.exe

Caminho completo para o executável do servidor 'hotspot' JDK. Observe, baixe o JDK completo, não apenas o 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

Nenhuma das opções acima é mostrada na documentação do Atlassian; adicionei-as ao longo do tempo por tentativa e erro. Quando o FeCru é iniciado pela primeira vez no wrapper de serviço, ele pode parar com um erro de falta de memória, a linha 'MaxPermSize' corrige isso.

Também descobri que é necessário especificar FISHEYE_INST conforme mostrado acima. Não tenho ideia de por que o caminho está especificado /..no final, foi assim no exemplo que encontrei. Algum ritual Linux culinário, sem dúvida. As outras linhas, não me lembro para que serviam, mas adicionei-as por um motivo ou outro e não documentei o porquê. Ninguém é perfeito ;-)

wrapper.java.initmemory=64 wrapper.java.maxmemory=1024

As alocações de memória heap aumentaram em relação aos padrões - eu indexo alguns repositórios bastante substanciais e posso pagar pelos recursos extras - você pode se safar com as alocações menores padrão.

informação relacionada