XOJO 2021r2 WEB2.0 - Caída de app web

Estimados si bien ésta consulta es WEB 2.0 me siento más cómodo haciéndola en el chat de Español.
Me sucede que hay veces la aplicación se “cae” es decir el servicio que esta levantado en Windows no responde, tengo que abrir los servicios y darle reiniciar, ahi todo vuelve a funcionar de maravillas.
Mi consulta son 2, no logro obtener un LOG para saber porque se “cae”, quizás tenga algún parámetro deshabilitado y la segunda es como puedo hacer que vuelva a “levantar” sola, hay forma?.
Desde ya muchas gracias!

Hay demasiadas posibilidades, las aplicaciones de Xojo no son conocidas por ser lo más estable. Una aplicación que deja de responder ya no puede hacer nada más “sola”, puedes hacer una app quiza de escritorio para monitorear la app web y reiniciarla de ser necesario. la recomendación que dan aqui en el foro es programar una tarea para que la aplicación web se reinicie cada 24 horas por ejemplo.

Hola @Ivan_Tellez que extraño porque tenemos que darle seguridad al cliente, aunque sea programando cosas extra. Lo que reinicie cada 24horas (u otro período) el tema es que si “cae” y aún falta mucho para ese lapso de tiempo no puede ser usado.

No es que pretenda que no caiga nunca (aunque seria lo ideal) pero por lo menos tener una forma de saber porque sucede (para solucionarlo) o que se reinice automáticamente (peligroso pero funcional).

Hola @Mauricio_Tanco,

no puedo responder a tu pregunta pero lo que si te puedo decir (si te sirve) es que la aplicación LifeBoat permite crear un servidor web para correr las aplicaciones Web 2.0. La verdad que funciona muy bien y te “levanta” las aplicaciones cuando estas se caen. Quizás sería una solución transitoria hasta que averigües como solventarlo.

Un saludo,
Sergio

3 Likes

Eso es para SERVIDORES LINUX, Mauricio esta preguntando por soluciones en Windows.

Sería cosa de que hicieras un debug extensivo y buscaras en donde falla. Por ejemplo, lo más comun es que sea problema con algun Memory Leak, tendrias que estar monitoreando tu app y ver si no se queda sin memoría

La otra es hacer la app de escritorio que cheque si esta funcionando la web, si no, que termine el proceso y lo reinicie.

Te sugiero configurar el servicio para que se reinicie automáticamente en caso de crash. Con eso solucionas (o escondes el problema)

Si la app se cierra es posible que tengas un unhandled exception.
Mete logging por todos lados, aunque haga la app un poco más lenta te va a ayudar a darte cuenta donde está el problema.

Asegúrate de que no tengas referencias circulares en el código porque eso impide que la memoria se liberé cuando supuestamente debería. Minitorea el uso de memoria.

Empeza por ahí.
Yo tengo apps web hechas en xojo qur funcionan non stop sin problema.
Saludos
R

1 Like

En mi experiencia con la Web 1.0 (pero creo que sigue siendo válida con la Web 2.0) el servicio de Windows no siempre se reinicia automáticamente.

Tengo una aplicación de consola ejecutándose que comprueba cada minuto si la aplicación web está activa. de lo contrario la reinicia.
No me gusta, pero funciona.

Te sugiero que te esfuerces en escribir en inglés en la sección correspondiente (web, en este caso).
Creo que obtendrás más respuestas.

Perdón si no escribí bien, estoy usando un traductor.

Me he acordado mal:
No uso una console app.
sino un windows task que ejecuta un archivo bat (comprueba el estado del servicio. si <> “RUNNING” lo reinicia)

hola mauricio… adicionalmente a lo que ya se dijo… quizas podrias probar si corriendo la misma app web en algun linux te genera el mismo problema?.. asi descartamos que sea un problema del SO o de la app. otra opcion podria ser dejar corriendo tu app varias horas directamente desde xojo y si tu app falla quizas el IDE te de alguna info util

Cuando la aplicación deja de responder, sigue indicando “Running”
La aplicación “cae” porque deja de presentarse PERO en el servicio indica que sigue corriendo.

Lo que sucede es que se da bajo determinados parámetros que no puedo saber, no creo sea un tema de concurrencia, quizás sea de algún parámetro no controlado por un usuario, pero al no tener un LOG (creo que la web 1 si lo generaba, la web 2 no lo veo) no tengo nada que me ayude a detectarlo.

Podría tener otra aplicación que hiciera una llamada al HandleURL de ésta otra que se cae y que cuando no responda reinicie el servicio bajo Windows ?
El enviar a la aplicación una solicitud y ésta leerla en el HandleURL y devuelva un valor (para saber que está activa) produce algún inconveniente en la performance de la misma? Estaba pensando en enviar el chequeo cada 1min. (no se el máximo que soporta un webtimer)

Mauricio,
Creá un mecanismo de logging propio, que guarde el estado de tu aplicación con cierta información de introspección si es necesario (como por ejemplo el stack).
Activa este logging y ponelo en las áreas críticas, como por ejemplo handleurl o session. Open
Fíjate si podes determinar por lo menos si el fallo se produce cuando se inicia la sesión.

Hola @RomanV tienes algún ejemplo de como implementaste un login propio?

Esto está cortado y pega con poco cuidado… por favor revísalo

En diversas partes de tu codigo podes por ejemplo llamar la función asi LogToFile (“inicializando app”).

LogToFile(data as String)

// FILE DUMP

dim f as folderItem
dim t as textoutputStream
dim ahora as new Date
dim logpath as String

Dim LogFile As FolderItem
LogFile = SpecialFolder.Desktop.Child( ahora.SQLDate + "_Log.txt") 
// Logging in in desktop folder not recommended. May not have write permissions.

f = LogFile

Dim Stack As String // = app.GetStack

If f <> Nil then
  t = TextOutputStream.Append(f)
  t.Write(ahora.SQLDateTime + " " +Data+EndOfLine+Stack+EndOfLine+EndOfLine)
  t.Close
End If
1 Like

Muchas gracias @RomanV lo voy a probar.

Hola @Ivan_Tellez consulta como puedo monitorizar si tengo pérdida de memoria como indicas (Memory Leak)?
Hemos resuelto el tema del reinicio remoto mediante la programación de un link y una app, pero el tema ahora es que NO debe “caer”.

Tengo 3 aplicaciones totalmente independientes y en todas termina sucediendo en algún momento.

Pues lo más fácil es consultar el uso de memoria de tu app. Solo abre el administrador de tareas, inicia tu app y checa cuanta memoria consume, vuelve a cada checar unas horas despues. Si el consumo de memoria aumenta cada vez más sin que disminuya, es un Memory Leak. Puede ser un problema en tu código, pero la verdad Xojo tiene bastantes problemas y puede ser problema del mismo framework. Lo más facil es programar un reinicio de las apps en la madrugada.

1 Like

muchas gracias!

Hola Mauricio, cuando convertí a Web 2.0 una aplicación corriendo el Linux al día siguiente ya no funcionaba, se trataba de un REST y me obligaba a reiniciarla a diario. Descubrí que cuando utilizo la conexión a base de datos debo usar db.Close para asegurar que se cierre la conexión. Esto me solucionó el problema, un punto para que verifiques y descartes.
En lo personal desarrollé un método que elijo el motor de base de datos y me devuelve el RowSet con los datos, aquí agregué el método Close al objeto de base de datos y eso resolvió el problema.

Forum for Xojo Programming Language and IDE. Copyright © 2021 Xojo, Inc.