Glassfish baixa performance

10 respostas
J

Senhores,

Estou enfrentando problema de performance no Glassfish 3.01, com apenas 10 usuários minha aplicação trava ao longo de poucas horas de uso.
Monitorando com o VisualVM e com o plugin Visual GC vejo que a partir do momento que a geração old do heap atinge o máximo a performance baixa muito tornando a aplicação inutilizável.

Acredito ser problema de algum framework, gostaria de saber se alguém já teve algum problema parecido.

Estou usando as seguintes tecnologias:

Jsf 2
Primefaces 3.0.M4
Hibernate 3.6
Seam Faces 3
Spring Security

VM options

-XX:MaxPermSize=512m
-XX:NewRatio=1
-XX:SurvivorRatio=8
-Xmx3072m
-Xms1024m

10 Respostas

L

Sem conhecer nada da aplicação, acredito que vc deve estar colocando coisa demais na sessão. Se estiver usando cache L2 do Hibernate o consumo de memória também aumentará, mas não acredito que desse tanto.

Pegue um ManagedBean seu e veja como está o escopo dele, tanto @SessionScoped como @ConversationScoped irão consumir bastante recurso, ainda mais se nesses beans tiverem coleções ou muitos objetos, por exemplo. Se estiver usando conversação e não tiver encerrando-a, é a mesma coisa do @SessionScoped.

J

Opa vou dar uma olhada na questão do cache L2, quanto ao escopo estou usando o ViewScope para 98% dos Mbeans do sistema.

obrigado!

L

Nunca mexi no Glassfish(mexi no antigo Sun Application Server), mas ele não teria alguma parte para visualizar esses recursos usados pelo siste,a, por que as informações da VisualVM não são uteis pra esse caso.

JBoss tem algumas opções pra monitoração, essa http://rhq-project.org/display/RHQ/Home é independente do servidor de aplicação e pode ser usada com Glassfish, tanto o servidor como o agente.

tmvolpato

Você criou um dataSource no glassfish para ele gerenciar ou você tem isso em arquivo .xml
se tiver em um .xml poste ele

flw

J

Tenho um DataSource no Glassfish, e as configurações do pool e caching são as default do Glassfish.

valeu.

tmvolpato

você tem um arquivo persistence.xml correto

poste o conteudo desse arquivo aqui para mim dar uma olhada
pode ser alguma configuração feita nesse aquivo que está dando problema na aplicação

J

Meu arquivo persistence.xml

<persistence-unit name="em">
		<!--
		The provider is a fully-qualified class name of the EJB Persistence provider. 
		You do not have to define it if you don't work with several EJB3 implementations. 
		This is needed when you are using multiple vendor implementations of EJB Persistence. 
		 -->
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
	    <jta-data-source>jdbc/teste</jta-data-source>
	    
		<properties>
			 
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			 
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.use_outer_join" value="false"/>

			<property name="hibernate.max_fetch_depth" value="0"/>
			<property name="hibernate.current_session_context_class" value="thread"/>
			
			<!-- envers (auditoria) -->
<!-- 			<property name="hibernate.hbm2ddl.auto" value="validate"/> -->
			<property name="hibernate.ejb.event.post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
		   	<property name="hibernate.ejb.event.post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
		   	<property name="hibernate.ejb.event.post-delete" value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
		   	<property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener" />
		   	<property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener" />
		   	<property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener" />
		   	
		   	<property name="org.hibernate.envers.audit_strategy" value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>
		   	<property name="org.hibernate.envers.store_data_at_delete" value="true"/>
		   	<property name="org.hibernate.envers.revision_field_name" value="SQ_REVISAO" />
		   	<property name="org.hibernate.envers.audit_strategy_validity_end_rev_field_name" value="SQ_REVISAO_FINAL" />
		   	<property name="org.hibernate.envers.revision_type_field_name" value="IN_TIPO" />
		   	<!-- /envers -->
		   	
		</properties>
		
	</persistence-unit>
tmvolpato

No seu arquivo persistence nao tem nada fora do normal

Quando você criou seu datasource no glassfish, vc lembra se alterou as configuraçoes

Grupo de conexões JDBC > Edit JDBC Connection Pool

pode tirar um print dessa tela ou escrever msm

Acredito eu que voce ja deve ter visto no Jvisualvm que o problema vem do pool

J

São as configurações default do Glassfish.


tmvolpato

nessa tela msm em cima
Edit JDBC Connection Pool

se for esse está correto

mas nao for vc tem que modifica
não vai ter q alterar nada na sua aplicação

Eu vi que vc está usando Spring Security
com JTA

eu estou com problema para configurar o spring para trabalhar com JTA
se vc puder me ajudar nessa parte eu agradeço

eu gostaria de saber como vc configurou no seu applicationContext do spring essa parte

pode me passa por email - [email removido]

flw

Criado 24 de fevereiro de 2012
Ultima resposta 24 de fev. de 2012
Respostas 10
Participantes 3