problemas com Java Heap Space
04/02/2013 02:12
0
Olá pessoal, sou novato em grails e Web. Estou apanhando para desenvolver um sistema de consulta a documentos. A consulta se dá inclusive por parte do texto desse documento.

O trecho de código que está produzindo o erro de estou de memória é esse...

def lista = Documento.getAll().texto

def searchLucene ={
def LuceneClass = grailsApplication.classLoader.loadClass("LuceneAux")
def fuzzySearch = LuceneClass.newInstance();
suggestWords: fuzzySearch.fuzzyLuceneList(lista,params.q);
}


O erro é esse:

Error 500: Error evaluating expression [searchLucene()] on line [152]: java.lang.OutOfMemoryError: Java heap space
Servlet: grails
URI: /Gerdoc/grails/documento/busca.dispatch
Exception Message: Java heap space
Caused by: Error evaluating expression [searchLucene()] on line [152]: java.lang.OutOfMemoryError: Java heap space
Class: DocumentoController
At Line: [152]
Code Snippet:


Alguem tem alguma sugestão para eu otimizar essa indexação?
Tags: Java heap space


0
@Fabiano

Você precisa configurar a máquina virtual Java (JVM) para que ela utilize a memória disponível do seu computador. A JVM não "engole todos os recursos da máquina", como por exemplo toda memória disponível, a não ser que você o configure.

- Tomcat:

Dê um stop no servidor. Vá na pasta onde o Tomcat está instalado, entre na pasta 'bin' e altere a linha abaixo no arquivo catalina.sh se for Linux, e startup.bat se for Windows. Antes disso faça um backup pois se você deixar alguma coisa errada o servidor não vai subir.

CATALINA_OPTS="-Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m"

Suba o servidor novamente.

- Glassfish:

Opção 1: Mais segura. Utilizar o asadmin via linha de comando.

> asadmin create-jvm-options --target server-config -- '-Xms512m'
> asadmin create-jvm-options --target server-config -- '-Xmx512m'
> asadmin create-jvm-options --target server-config -- '-XX:PermSize=256m'
> asadmin create-jvm-options --target server-config -- '-XX:MaxPermSize=256m'

Pra verificar se as alterações fizeram efeito com o seguinte comando:

> asadmin list-jvm-options

O bacana é que você pode criar um script e guardar no seu 'kit' de desenvolvimento pra rodar sempre que precisar.

Segue a documentação do asadmin para alterar opções da JVM: http://docs.oracle.com/cd/E18930_01/html/821-2416/gepzd.html#scrolltoc

Opção 2: Mais arriscada. Basta abrir o arquivo /glassfish/domains/domain1/config/domain.xml e procurar a tag <java-config> e adicionar os novos parâmetros. Faça um backup do arquivo antes.

<java-config>
(aqui sao os parametros existentes)
<jvm-options>-Xms512m</jvm-options>
<jvm-options>-Xmx512m</jvm-options>
<jvm-options>-XX:PermSize=256m</jvm-options>
<jvm-options>-XX:MaxPermSize=256m</jvm-options>
</java-config>

Opção 3: Mais fácil que respirar. Acesse o console web via browser: http://localhost:4848 e adicione visualmente.



Os parâmetros Xms e Xmx configuram a máquina virtual para utilizar 512 MB de RAM de heap space. Você pode precisar utilizar mais memória dependendo da aplicação (o Lucene usa muita memória) ou simplesmente aumentar se você tiver memória disponível e o servidor for dedicado pois a aplicação pode ficar mais rápida. Se precisa aumentar pra 1,5GB, altere de 512m para 1536m.

Os parâmetros PermSize e MaxPermSize resolvem um possível problema de "OutOfMemoryError: Permgen Space" que pode ocorrer quando sua aplicação ficar maior.

Dica 1:

Para evitar este tipo de problema, aloque um tempo para substituir a JVM 'Hotspot' (a máquina virtual padrão) pela JVM 'JRockit' que também é da Oracle porém mais rápida e estável.

Dica 2:

Seu código está muito 'Java' e pouco 'Groovy'. Recomendo que utilize o Searchable Plugin.
http://grails.org/plugin/searchable

O Searchable Plugin abstrai o uso do Lucene (elimina a maior parte de códigos de configuração) e já integra com as entidades do GORM/Hibernate. A documentação está no link acima também. Seu código vai ficar mais legível (Groovy-style)!

Abraço!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto