Foros del Web » Programando para Internet » PHP »

Script largo se para después de un tiempo

Estas en el tema de Script largo se para después de un tiempo en el foro de PHP en Foros del Web. Buenas que tal, Vereís tengo un scritp el cual está haciendo una consulta a la base de datos y extrae muchos resultados con los que ...
  #1 (permalink)  
Antiguo 16/07/2018, 09:45
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Script largo se para después de un tiempo

Buenas que tal,

Vereís tengo un scritp el cual está haciendo una consulta a la base de datos y extrae muchos resultados con los que va haciendo una seria de operaciones, funciona correctamente el problema es que despues de aproximadamente unos 30 o 40 min se para y no continua con el resto de registros.

Mi pregunta es: puede que sea por culpa de la conexión a la base de datos que se cierre o no?

Que otra cosa puede ser?

Saludos!!
  #2 (permalink)  
Antiguo 16/07/2018, 09:55
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Script largo se para después de un tiempo

Te recomendaria revisar el tiempo maximo de ejecución con el que esta programado PHP en el servidor que estas ejecutando el script.. tambien revisa el log de errores
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 16/07/2018, 10:00
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Script largo se para después de un tiempo

Hola petit que tal,

Verás se ha olvidad comentar que el scritp de ja de funcionar tanto si lo ejecuto desde el navegador como desde una tarea cron.

El tiempo maximo de ejecución se puede mirar en el archivo de configuración php.ini?

Saludos y gracias!
  #4 (permalink)  
Antiguo 16/07/2018, 11:53
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Script largo se para después de un tiempo

Buenas de nuevo petit89,

El max_execution_time en el pnp.ini está en: 50000, osea cerca de 14 horas, por esto no creo que sea. Me inclino más por el tiempo que la conexión a la base de datos esta abierta.

No se como podria mirarlo y evitar que se cierre.

Saludos y gracias!!
  #5 (permalink)  
Antiguo 16/07/2018, 14:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Script largo se para después de un tiempo

Puedes dividir el proceso en lotes? Creo que sería lo más conveniente.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 16/07/2018, 17:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Script largo se para después de un tiempo

Hola Triby que tal,

Pués en realidad si que podría pero el tema es que está haciendo la ejecución del script con una tarea cron y ya está el servidor algo cargado de tareas cron que no me gustaría que se solapasen unas con otras. Si pudiera solucionarlo sería lo ideal.

He intentado detectar si en algún momento hay un problema con la conexión de este modo:

Código PHP:
Ver original
  1.         {
  2.             echo "Failed to connect to MySQL: " . mysqli_connect_error();
  3.  
  4.         }else{
  5.  
  6.             echo "La conexión está bien";
  7.         }

Pero no me ha detectado nada y se sigue parando después de un buen rato, como una media hora.

A ver si alquien tienen idea de que puede estar pasando.

Gracias Triby, saludos!
  #7 (permalink)  
Antiguo 17/07/2018, 03:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Script largo se para después de un tiempo

Si quieres seguir probando con lo mismo, crea un registro (log) de actividades, guardando cada paso y los posibles errores en un archivo de texto, tal vez eso te ayude a identificar la falla.

Ya tienes un cron para esta tarea? no necesitas más. Hace algún tiempo tuve que hacer algo similar y no es tan difícil, solo hay que guardar el último registro procesado y continuar desde ahí:
1- Leer dato de último registro, si es -1, arrancar desde el principio
2- Hacer una consulta para obtener 100 registros (o los que sean necesarios) y procesarlos
3- Después de procesar cada registro, actualizas el dato del punto 1; si llegas al final de la tabla, lo pones en -1
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 17/07/2018, 06:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Script largo se para después de un tiempo

Cita:
Iniciado por franjgg Ver Mensaje
Buenas que tal,

Vereís tengo un scritp el cual está haciendo una consulta a la base de datos y extrae muchos resultados con los que va haciendo una seria de operaciones, funciona correctamente el problema es que despues de aproximadamente unos 30 o 40 min se para y no continua con el resto de registros.

Mi pregunta es: puede que sea por culpa de la conexión a la base de datos que se cierre o no?

Que otra cosa puede ser?

Saludos!!
En principio, es una mala práctica abrir la base, hacer una consulta e ir procesando en la aplicación los resultados de a uno. Es casi de cajón que eso hará fallar el script por la simple razón de que tienes una enorme cantidad de cambios de contexto que no estás considerando, lo que le suma overhead a lo pavo.
Los cambios de estado entre lectura, escritura y procesamiento no son gratuitos, le cuestan tiempo al procesador y al sistema, sin considerar lo que le cuestan a la conexión, que no es simplemente abrir el enlace a la base, sino el mantenimiento de la comunicación bidireccional.

SIn entrar en detalles, deberías considerar exactamente qué operaciones estás haciendo, y evaluar si alguna o todas esas operaciones que realizas con los datos no podrían ser realizadas directamente en la base, por medio de stored procedures.

¿Podrías explicarnos cuáles son las operaciones que realizas, o postear el código que las hace, para evaluar qué se puede derivar a la base?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 18/07/2018, 08:06
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Busqueda Respuesta: Script largo se para después de un tiempo

como experiencia, diria que tu script php esta consumiendo RAM y no la esta liberando cada X interacion y por eso el sistema lo MATA; deberias fiajrte si en 15 minutos la RAM que consume baja o no, para iteraciones largas siempre debes tener en cuenta el destruir valores que no usaras y en consultas SQL , debes de trabajar por LOTES; hacer procesos por cada 1000 registros o cada 100 y volver

Etiquetas: funcion, largo, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:43.