Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/03/2012, 20:37
Avatar de SPAWN3000
SPAWN3000
 
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: JSF 1.2 EJB 3.0 No libera memoria y consume los servidores

Bueno,

Tu problema es algo de análisis muy preciso, y se necesita recoger información mas detallada para poder definir la solución precisa. Asi que:

Muchos procesos relamente consumen gran cantidad de memoria debido a que estas consultas son almacendadas en memoria... Y realmente esto no es es siempre una buena practica... Son buena practica solo si almacenas tablas muy pequeñas, o por lotes(Paginacion), y sin muchos campos. Pero hay que notar que si tiene muchos usuarios conectados simultaneamente, y se cargan varias consultas en memoria desde el inicio de sesion del usuario con la finalidad de mejorar la velocidad de respuesta al evitar estar ingresando a la base de datos... Este podria ser un error muy grave sin no es posible controlar...

- "De antemano: Apunto que son consultas almacenadas en memoria"

- No es bueno forzar el llamado al GarbageCollector, este ya es un de administracion propia.

1) Algunas consultas es mejor dejarlas en la base de datos.
2) Si cuentas con motores como Oracle, SQL Server, Sybase, DB2, Es muy, muy recomendable el uso de "Stored Procedures y la correcta indexacion" un recuerso que no se puede desperdiciar... (Es súper importante!! ninguna aplicación podrá vencer a la base de datos en procesamiento , ninguna...). Aun si conoces de optimización.
3) Si tienes JBosss, espero trabajas con un pool de conexiones, maximo 30...
4) Para "muchas" sentencias es bueno usar "PreparedStatemen", pero solo si tiene un alta concurrencia... de lo contrario dejalas con "Stament" Únicamente, no hara mucha diferencia... pero cada granito de mejora adicional puede hacer la diferencia.
5) Revisa si no estas dejando conexiones abiertas...
6) Si extraes información orientada a reportes, o listados, nunca los guardes en memoria. Mejor almacenas el resultado en una tabla de la base de datos, y posteriormente aplicas un select sobre la tabla con el id_proceso generado pro el usuario.


Algunos mas que no se me ocurren en el momento...