| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2008 10:26:54
|
nicholas.bittencourt
JavaTeenager
![[Avatar]](/images/avatar/7522a10ddf6916abccf0163b58ca0543.jpg)
Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline
|
Pessoal,
Estou trabalhando num portal que apresenta serios problemas de performance, não aguentando nem 500 usuários em uma arquitetura que, segundo o fabricante, suporta mais de 5000. Ja analisamos o código e fizemos algumas alterações mas gostaria de saber de vocês algumas dicas ou sites que possam ajudar nesse trabalho.
Estamos trabalhando com BEA Portal 10MP1, JSF-RI 1.2 e Hibernate 3. Ainda não habilitamos o cache level 2 do Hibernate e o JSF está persistindo os objetos no cliente ao invés do servidor.
Obrigado!!
|
--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br
We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2008 13:51:48
|
Emerson Macedo
Virtual Machine Man
![[Avatar]](/images/avatar/360c19682e81f21d55846685c1701179.jpg)
Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline
|
Meu caro, existem diversos fatores que podem comprometer a performance da sua aplicação. Produtos de caixinha para grande volume de acesso simultâneo geralmente são complicados de ajustar.
Eu não conheço esse produto da Bea. Nunca usei. Com as informações que você passou, a única coisa que posso te dizer é pra você com urgência habilitar o second-level cache do Hibernate.
[]s
|
Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com
"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2008 19:26:06
|
Laércio Queiroz
Thread.start()
![[Avatar]](/images/avatar/842ef8f949db333c767fe209f9277459.jpg)
Membro desde: 31/07/2007 16:49:08
Mensagens: 32
Localização: Salvador - BA
Offline
|
Emerson Macedo wrote:Com as informações que você passou, a única coisa que posso te dizer é pra você com urgência habilitar o second-level cache do Hibernate.
É comum utilizar bases de dados compartilhadas com outras aplicações quando construímos portais. Não sei se é o caso, mas creio que isto deve ser observado antes de definir este nível de cache.
[]s
|
Laércio Queiroz
http://laercioqueiroz.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2008 22:28:25
|
almeidar
Entusiasta Java
![[Avatar]](/images/avatar/5c18451ace5d9c3f7e8b54576eb89ee8.jpg)
Membro desde: 07/07/2007 15:26:14
Mensagens: 15
Offline
|
Use uma ferramenta de profiler antes de qualquer manutenção! Gosto do JProfiler.
|
http://manifestonaweb.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2008 08:24:04
|
nicholas.bittencourt
JavaTeenager
![[Avatar]](/images/avatar/7522a10ddf6916abccf0163b58ca0543.jpg)
Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline
|
Laércio Queiroz wrote:
Emerson Macedo wrote:Com as informações que você passou, a única coisa que posso te dizer é pra você com urgência habilitar o second-level cache do Hibernate.
É comum utilizar bases de dados compartilhadas com outras aplicações quando construímos portais. Não sei se é o caso, mas creio que isto deve ser observado antes de definir este nível de cache.
[]s
O portal realmente compartilha a base de dados com o publicador de conteudo, que é uma aplicação a parte. Pensei em habilitar o cache somente para consultas recorrentes que dão bastante trabalho a aplicação. E como o estresse ocorre na maior parte com muitos usuários, colocar o tempo de cache o suficiente para a sessao dos usuários expirar.
|
--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br
We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2008 08:26:19
|
nicholas.bittencourt
JavaTeenager
![[Avatar]](/images/avatar/7522a10ddf6916abccf0163b58ca0543.jpg)
Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline
|
almeidar wrote:Use uma ferramenta de profiler antes de qualquer manutenção! Gosto do JProfiler.
Ja usamos o JProfiler aqui... Identificamos uma quantidade absurda de Strings sendo criadas mas nao conseguiamos rastrear o motivo delas surgirem. Depois de um codereview na aplicação, identificamos que todos os logs e as queries da aplicação eram montados usando concatenação de string. Substituimos alguns codigos por StringBuffer e suprimimos os logs quando nao estao sendo usados.
Jah conseguimos diminuir o tempo de acesso ao site pela metade soh com essa alteração... E a memória, a principio, não está mais "topando".
|
--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br
We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2008 12:27:34
|
almeidar
Entusiasta Java
![[Avatar]](/images/avatar/5c18451ace5d9c3f7e8b54576eb89ee8.jpg)
Membro desde: 07/07/2007 15:26:14
Mensagens: 15
Offline
|
Qual é a versão do Java que você está trabalhando?
O StringBuilder é mais performático que o StringBuffer por não ser sincronizado. A não ser que você esteja trabalhando multi-thread aí sim é melhor deixar sincrozinado.
Porém quando você faz concatenação de string, o compilador do java transforma isso em StringBuilder no bytecode, portanto o ganho que você teve deve ter sido por causa do log e não por causa do StringBuffer.
This message was edited 1 time. Last update was at 23/07/2008 12:28:24
|
http://manifestonaweb.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2008 15:00:40
|
nicholas.bittencourt
JavaTeenager
![[Avatar]](/images/avatar/7522a10ddf6916abccf0163b58ca0543.jpg)
Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline
|
Estamos usando o java 5 aqui...
Quanto ao log o que fizemos foi, antes de cada debug ou trace, colocar um if para ver se aquele nivel estava habilitado. Assim ele nem sequer gerava as strings para fazer a concatenação.
|
--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br
We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2008 19:16:08
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Chame um profissional em performance pois ao que tudo indica vocês estão boiando completamente sobre qual é o problema.
Problemas de performance se resolvem de maneira científica investigando primeiro os hotspots, não otimizando no aleatório.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 04:55:20
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
nicholas.bittencourt wrote:[...]segundo o fabricante, suporta mais de 5000. [...]
BEA Portal
O fabricante mentiu.
Mas, de qualquer forma, faça o que o louds disse.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 08:13:03
|
nicholas.bittencourt
JavaTeenager
![[Avatar]](/images/avatar/7522a10ddf6916abccf0163b58ca0543.jpg)
Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline
|
Eu tambem nao acredito muito nessa realidade deles. Até porque cada sessao do usuário só poderia ter uns 2K se for esse caso, e com JSF e tudo mais acho que fica um pouco complicado.
De qualquer forma a aplicação já está bem melhor, com o tempo caindo para 1/5 do inicial, depois da implementação de algumas das dicas mostradas aqui e outras melhorias que fizemos. Realmente programar as 3 da manha afeta a qualidade do codigo...
Como o loud sugeriu, vamos encaminhar agora a um especialista para que faça um code review mais detalhado e aponte as falhas da aplicação. Acho que com isso teremos um ganho bem maior.
Obrigado a todos pelas dicas!
|
--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br
We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 08:31:44
|
almeidar
Entusiasta Java
![[Avatar]](/images/avatar/5c18451ace5d9c3f7e8b54576eb89ee8.jpg)
Membro desde: 07/07/2007 15:26:14
Mensagens: 15
Offline
|
Problemas de performance se resolvem de maneira científica investigando primeiro os hotspots, não otimizando no aleatório.
Ok louds, porém um trecho de código que está sendo muito executado pode ser elegido pela VM para ter um hotspot, porém não necessáriamente esse trecho pode ter problema de perfomance, concorda? Por exemplo um comando 'for' pode ser executado muitas vezes e ser performado pelo JIT, porém o gargalo pode estar no banco de dados. Não seria mais interessante focar em tempo de processamento (CPU ) a partir da ferramenta de profiler?
|
http://manifestonaweb.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 10:06:44
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
almeidar wrote:
Problemas de performance se resolvem de maneira científica investigando primeiro os hotspots, não otimizando no aleatório.
Ok louds, porém um trecho de código que está sendo muito executado pode ser elegido pela VM para ter um hotspot, porém não necessáriamente esse trecho pode ter problema de perfomance, concorda? Por exemplo um comando 'for' pode ser executado muitas vezes e ser performado pelo JIT, porém o gargalo pode estar no banco de dados. Não seria mais interessante focar em tempo de processamento (CPU ) a partir da ferramenta de profiler?
Oque foi que eu escrevi? Hotspots são os pontos da aplicação responsáveis pela maior fatia de um recurso, Seja ele CPU, memória, tempo de resposta, ou qualquer que seja o problema. Um profiler não é a única ferramenta a ser utilizada, principalmente em aplicações n-tier.
Fora isso, não faz sentido falar "ser performado pelo JIT", isso é irrelevante quando se está estudando a performance de uma aplicação uma vez que todos pontos de interesse necessariamente já terão sido compilados para código nativo.
Aleḿ do que, é quase inútil otimizar código que é responsável por quase nada do tempo total de execução, é feito lustrar o interior o cano de escapamento de um carro - ninguém vai notar.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 11:36:14
|
almeidar
Entusiasta Java
![[Avatar]](/images/avatar/5c18451ace5d9c3f7e8b54576eb89ee8.jpg)
Membro desde: 07/07/2007 15:26:14
Mensagens: 15
Offline
|
Oque foi que eu escrevi? Hotspots são os pontos da aplicação responsáveis pela maior fatia de um recurso, Seja ele CPU, memória, tempo de resposta, ou qualquer que seja o problema.
Certo louds, mas se o gargalo da app for BD?
Um profiler não é a única ferramenta a ser utilizada, principalmente em aplicações n-tier.
Gostaria de saber quais outras ferramentas podemos usar em aplicações n-tier, além do profiler.
O JMeter é interessante, porém primeiro devo resolver a performance e depois fazer teste de carga.
Fora isso, não faz sentido falar "ser performado pelo JIT", isso é irrelevante quando se está estudando a performance de uma aplicação uma vez que todos pontos de interesse necessariamente já terão sido compilados para código nativo.
Sim, concordo. Talvez eu tenha me expressado mal.
Aleḿ do que, é quase inútil otimizar código que é responsável por quase nada do tempo total de execução, é feito lustrar o interior o cano de escapamento de um carro - ninguém vai notar.
Exato! Devemos fazer o design da aplicação bem simples, sem fazer otimizações prematuras. Somente se houver a necessidade aí sim fazer otimizações utilizando as ferarmentas necessárias.
Para quem se interessar:
http://martinfowler.com/ieeeSoftware/yetOptimization.pdf
http://www.akitaonrails.com/2008/7/21/tradu-o-regras-de-otimiza-o
|
http://manifestonaweb.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 11:43:59
|
almeidar
Entusiasta Java
![[Avatar]](/images/avatar/5c18451ace5d9c3f7e8b54576eb89ee8.jpg)
Membro desde: 07/07/2007 15:26:14
Mensagens: 15
Offline
|
Gosto bastante desse assunto e discussões como essas são muito importantes!
Escrevi algo relacionado à performance no post:
http://manifestonaweb.wordpress.com/2008/06/18/escalabilidade-performance/
|
http://manifestonaweb.wordpress.com |
|
|
 |
|
|