miércoles, 26 de agosto de 2009

ORA-04030: out of process memory when trying to allocate 123404 bytes

Hace algunos días empece a recibir errores extraños en una de nuestras aplicaciones. Ocasionalmente nos reportaban que no podian hacer algo o que no se mostraba cierta información, pero cuando volvían a probar la aplicacion empezaba a funcionar correctamnete.

El problema con este tipo de reportes, es que son bastante difíciles de encontrar y de replicar, por consiguiente se empiezan a volver difíciles de resolver.

La aplicación es una aplicación web en java que consulta una base de datos oracle, ambos servidores estan corriendo sobre windows.

Lo primero que hicimos fue empezar a generar logs adicionales a los bloques de codigo que pensabamos pudieran estar fallando, empezamos a encontrar errores de este tipo desde mis programas:

java.sql.SQLException: ORA-04030: out of process memory when trying to allocate 123404 bytes (QERHJ hash-joi,kllcqas:kllsltba)

y desde el sistema operativo empece a ver errores en el event viewer que decían que no se podía asignar memoria a un thread de la base de datos.

Aclaro que no soy DBA, soy desarrollador. Pero a veces como desarrollador es necesario involucrase en temas de infraestructura para poder identificar los problemas que suceden.

Tenía una maquina con 4gb de ram y cuando miraba la memoria de la maquina no pasaba de los 2gb.

Encontramos 2 temas que estaban causando el problema:
1. El servidor es un windows de 32 bits, y por ser un windows de 32 bits no puedo tener ningún proceso en ejecución con mas de 2gb de uso de memoria.
Se modifico el boot.ini del servidor para que pudieran utilizarse hasta 3 gb de ram en un solo proceso.

http://technet.microsoft.com/es-es/library/bb124810.aspx

2. Revisando los parámetros de la base de datos, encontré que se tenía configurado un SGA de 2GB y un PGA de 1.6GB. Por lo que el tamaño del proceso que estaría ejecutando el oracle llegaría a tener hasta 3.6 GB en memoria. Procedímos a cambiar los parámetros de configuracion de la base de datos para corregir el tema.

Este cambio se hizó en los parámetros, sga_target y pga_aggregate_target.

saludos!