Saturación de memoria, colapso y reinicio. 4D Server v14 web services (SOAP)

Product :4D - 4D Server
OS : Windows

Buenas tardes,

Sobre una aplicación 4D Server v14 corriendo como servicio Windows Server 2008 Enterprise Edition he observado una saturación de memoria física y virtual, tal como puede observarse en las fotos que adjunto, que hacen que la aplicación acabe colapsándo y reiniciándose.

Dicha aplicación básicamente gestiona dos tipos de métodos bastante simples:

1.- Métodos que se inician al arranque del servidor y que se ejecutan cada cierto tiempo.

2.- Métodos publicados como servicios web (SOAP) que atienden peticiones web.

He mirado opciones del 4D Server y métodos 4D para ver si se pudiera liberar está memoria pero no encuentro solución. Creo que se debe a los web services que se van acumulando en la memoria, pero no encuentro como gestionar o liberarlo.

Con 4D Server v12 misma aplicación no se observó este comportamiento.

A ver si alguien pudiera ayudarme.

Gracias. Saludos

[]25144364;“Your comment here…”[/]
[]25144374;“Your comment here…”[/]

Hola Angel,

¿Cuánta memoria tienes asignada como memoria caché para tu aplicación?

De acuerdo a las gráficas que envías la memoria no se ha saturado todavía.

Lo primero es revisar que la memoria caché sea adecuada respecto a la base de datos y el equipo que tienes.

Tienes un equipo con 4 GB de RAM y estás corriendo con 4D Server de 32 bits.En ese caso asigna como memoria caché 1800 MB. Recuerda desmarcar la opción de caché adaptativa.

En las gráficas del servidor hay una que es de Memoria Caché, esa te puede dar más idea del comportamiento de la aplicación.

Por otro lado, está la forma en que tienes programada la aplicación. Veo que tienes varios métodos que se inician al arranque y que se ejecutan periódicamente. En esos casos yo recomiendo tener un proceso que lance a los otros procesos, de esa forma los métodos que lances con regularidad correrán en procesos nuevos, en vez de ejecutarse en un proceso que está cargado en la memoria por horas y que fue retrasado con DELAY PROCESS.

Saludos,

Hola Angelo,

La cache está en modo adaptativo y asignada 512MB.

La memoria que se satura es la memoria virtual. Tanto la memoria física como la caché se mantienen inalterables a lo largo del tiempo.

La memoria virtual va creciendo según se van ejecutando los procesos y cuando está próxima a los 2 GB se para el servicio windows. La carga de trabajo es alta y la acumulación de está memoria hace que se sature. Existen procesos SOAP que son ejecutados directamente a petición de cliente web y que son eliminados despues de su ejecución y he observado que estos acumulan memoria virtual que luego no libera.

También he probado a aumentar la memoria virtual para alargar la caida pero no he conseguido que 4D Server trabaje con más de 2GB.

Te comento por si es de utilidad:

Los procesos que ejecuta el 4D Server sobre todo trabajan con variables y arrays, utiliza las tablas 4D de apoyo, pues la base de datos con la que trabajamos es Oracle. Su trabajo principal es la actualización de datos, generación de informes (txt, pdf) y documentos que luego son enviados vía FTP o mail.

Saludos

: Angel SAMPAYO SORELL

Existen procesos SOAP que son ejecutados directamente a petición de
cliente web y que son eliminados despues de su ejecución y he
observado que estos acumulan memoria virtual que luego no libera.
Se debe verificar que cada DOM creado se destruya después: DOM CLOSE XML.

Hola Arnaud,

Los xml generados con el DOM son eliminados posteriormente con DOM CLOSE XML.

Un saludo y gracias

Hola Angel,

Te recomiendo hacer los ajustes de caché antes mencionados y revisar que efectivamente siempre se cierran los XML como lo indica Arnaud, además de limpiar las variables y arrays correspondientes.

Veo que estás usando 4D v14.3. La última versión de 4D v14 es la 14.6. Te recomiendo actualizar a esta versión:

http://download.4d.com/Products/Archives/Line_v14/4D_v14_6/installers/

Por otra parte lo recomendado para ejecutar 4D Server v14 son 8 GB (En 4D v12 lo recomendado era 2 GB):
ftp://ftp.4d.com/ACI_PRODUCT_REFERENCE_LIBRARY/4Dv14_Certif_Matrix.pdf

Si se sube la memoria del servidor entonces puedes usar 4D Server de 64 bits y por lo tanto más memoria.

Saludos,

Hola Ángel,

De acuerdo a la documentación también hay que limpiar la memoria después WEB SERVICE GET RESULT.

“El parámetro opcional *, indica al programa que libere la memoria dedicada al procesamiento de la petición. Debe pasar este parámetro después de recuperar el último valor enviado por el servicio web.”

http://livedoc.4d.com/Manual-de-lenguaje-4D-17-R2.1720/Servicios-Web-Cliente/WEB-SERVICE-GET-RESULT.301-3856541.es.html

Hola Angelo,

Ya he probado los ajustes en la caché y el resultado es que me satura antes la memoria virtual, ya que destina más de esta a la caché y quedaría menos memoria libre en el arranque.

También he probado con la versión de 4D 14.5, subire a la 14.6 aunque no creo que haya diferencias.

La máquina lo primero que hicimos al ver el problema fue aumentar la memoria a 8GB, aunque este aumento no afecta a la memoria virtual que incluso asignandola 10 GB de meroria virtual en windows 4D solo aprovecha 2GB. Aunque esto no solucionaría el problema de acumulación de memoria.

Valoraremos e intentaremos probar la versión de 4D server de 64bits, pero para ello tenemos que actualizar los Pluggin, OCI, configuración máquina.

Un saludo

Hola Alberto,

Si estamos utilizando el parámetro “*” en WEB SERVICE GET RESULT para liberar memoria.

Un saludo y gracias