JSF+Spring+Hibernate consumindo muita memória em servidor remoto

Ola amigos

tenho uma aplicação que roda com JSF 2.1 Spring 3.1 Hibernate 3.6 tomcat 7 e Spring Security 3

em desenvolvimento ela funciona certinho porém quando fui fazer o deploy no servidor remoto começou a dar erro de permGen

Exception in thread "main" java.lang.OutOfMemoryError: PermGen space

minha duvida é a seguinte o servidor que aluguei no webhost.com.br tem apenas 128mb de memória dedicada isso é pouco para uma aplicação desse porte que roda varios frameworks?
já pesquisei e li que o spring + hibernate gasta muita memória mesmo li até sobre o -XX:MaxPermSize=256m porém em ambiente de desenvolvimento nenhum PC teve qualquer configuração alterada para aumentar a memório da JVM ou tomcat e sempre funcionou já aumentei o plano para ter 256mb de memória dedicada mas o erro persiste já usei o JProfiler para procurar leaks de memória mas não acredito que existam.

Resumindo: 256mb de memória dedicada é pouco para uma aplicação assim com tantos frameworks? Deveria eu contratar um plano com mais memória ou existe alguma biblioteca que gerencia o consumo de memória para mim?

Desde já agradeço

Cara, teste localmente na sua máquina setando o XX:MaxPermSize para 128. Ai vc faz os testes e verifica na sua propria máquina se ocorre o problema. Se ocorrer vc aumenta para 256 e verifica, se ocorrer, ai vc aumenta pra ver em quanto de memória que resolve. Se aumentar um pouco mais e resolver, ai vc aumentar o seu plano la. 256 não sei se ta o suficiente. Testa com 512 pra ter certeza. Quanto a uma lib que gerencie isto para vc, desconheço.

Ola amigo

incrivelmente eu testei localmente com

-XX:MaxPermSize=64m  

na JVM e funcionou so deu erro de permGen quando setei 32mb dai fui olhar o catalina.sh do servidor e esta assim

JAVA_OPTS="-Xms32m -Xmx256m -XX:MaxPermSize=96m" se eu alterar o MaxPermSize no tomcat será que surtira algum efeito? pois localmente nao há nenhuma configuração diferente no meu tomcat

Obrigado

Estou tento o mesmo problema… sendo que antes de eu atualizar o Spring para 3.1 e mudar a implementação de JPA para Hibernate tudo era tranquilo.
Descobriu algo?

Ola amigos,

To tentando montar uma aplicação com JSF 2.1 + Hibernate e Spring Security, pelo que vi no tópico vocês ja conseguiram isso. Estou seguindo o livro da novatec Programação pra WEB. O livro monta um DataSource JNDI para o Spring Security e Hiberante acessarem o Mysql fiz e já refiz os passos e sempre apresenta a seguinte mensagem de erro pelo netbeans 7.1.1:

INFO: Server startup in 11919 ms 10/06/2012 15:09:31 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads GRAVE: The web application [/Financeiro] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak. 10/06/2012 15:09:32 org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/Financeiro] 10/06/2012 15:09:32 org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor Financeiro.xml from /Users/cleber/.netbeans/7.1.1/apache-tomcat-7.0.22.0_base/conf/Catalina/localhost

Meu context.xml onde cria o datasource:

<?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/Financeiro" reloadable="true"> <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/FinanceiroDB" password="adm" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/financeiro?autoReconnect=true" username="root"/> </Context>

O meu applicationContext.xml:

[code]<?xml version="1.0" encoding="UTF-8"?>

<bean id="financeiroDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:comp/env/jdbc/FinanceiroDB</value>
	</property>
</bean> 	

[/code]

O meu applicationConext-security.xml

[code]<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns=“http://www.springframework.org/schema/security
xmlns:b=“http://www.springframework.org/schema/beans
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd”>

	<intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" />
	<intercept-url pattern="/restrito/**" access="ROLE_USUARIO" />
	<form-login login-page="/publico/login.jsf"
		always-use-default-target="true" default-target-url="/restrito/principal.jsf"
		authentication-failure-url="/publico/login.jsf?login_error=1" />
	<logout/>
	<remember-me />
</http>

<authentication-manager>
	<authentication-provider>
		<jdbc-user-service data-source-ref="financeiroDataSource"
			authorities-by-username-query="SELECT login, permissao FROM usuario WHERE login = ?"
			users-by-username-query="SELECT login, senha, ativo FROM usuario WHERE login = ?" />
	</authentication-provider>
</authentication-manager>

</b:beans>[/code]

Meu web.xml:

[code]

contextConfigLocation

/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-security.xml



springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy

<filter-mapping>
	<filter-name>springSecurityFilterChain</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>   
    
    

<resource-ref>
	<description>DataSource FinaceiroDB</description>
	<res-ref-name>jdbc/FinanceiroDB</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>[/code]

Amigos agradeço qualquer ajuda ou dica pois já tem varios dias que quebro cabeça com esse código.

forte abraço.

O que está dizendo ai é que o “contexto” que configurou possivelmente não foi carregado, pois o caminho /Financeiro não está conhecido.
O por quê de não ter sido carregado é outra historia! Pode ter sido erro de parametros, caminho incorreto do arquivo de contexto, etc…
O melhor a fazer é verificar o carregamento…

Ari

gnucleber,

da uma olhada nos logs do tomcat, eu tava tendo bastante destes erros e por incrível que pareça
uma daz vezes foi erro de um mapeamento do hibernate*, não se confie muito destes erros ae, eu
acho melhor olhar direto nos logs.

Caso vc esteja rodando direto do Netbeans, copia o projeto e roda dirteo pelo tomcat e acompanha nos logs,
eu ja tive esses erros dos infernos, mas foram vários e vou ter que olhar melhor aqui pra te ajudar.

*Alterei

[quote=Haziel]gnucleber,

da uma olhada nos logs do tomcat, eu tava tendo bastante destes erros e por incrível que pareça
uma daz vezes foi erro de um mapeamento do tomcat, não se confie muito destes erros ae, eu
acho melhor olhar direto nos logs.

Caso vc esteja rodando direto do Netbeans, copia o projeto e roda dirteo pelo tomcat e acompanha nos logs,
eu ja tive esses erros dos infernos, mas foram vários e vou ter que olhar melhor aqui pra te ajudar.[/quote]

Ola Haziel, realmente você tinha razão cara. Peguei a versão mais nova do netbeans (7.1.2) coloquei a aplicação e rodei o tomcat e fui acessar direto pelo browser ao invez de mandar executar pelo NetBeans e ta tudo normal! Vale pela dica :wink:

É um parto, toda alteração nas classes tenho que ficar parando o tamcat e copiando do netbeans mas
é a única maneira que deu pra mim. Que bom que ta tudo ok. Tbm estou usando este livro, é muito bom.