Foros del Web » Programando para Internet » PHP »

Scrapping: Memory exceded :S

Estas en el tema de Scrapping: Memory exceded :S en el foro de PHP en Foros del Web. Estoy haciendo un scrapping de 30000 paginas webs para probar una teoria, pero resulta que me está pasando algo que nunca me habia pasado, y ...
  #1 (permalink)  
Antiguo 12/09/2010, 23:12
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Scrapping: Memory exceded :S

Estoy haciendo un scrapping de 30000 paginas webs para probar una teoria, pero resulta que me está pasando algo que nunca me habia pasado, y me está pasando tanto en mac como en linux.

El file_get_contents o el curl consume una barbaridad de recursos y siempre me sale error de falta de memoria, y eso que ahora mismo le he dedicado en el php.ini 2000Mb para ese script..... Es una locura pero ni con esas, cada vez que va haciendo el bucle no libera la memoria usada para almacenar el codigo fuente o algo asi... :S


Para abrir las paginas ahora he pasado a usar curl, que consume un poco menos pero aun asi no para de consumir recursos.

Uso MacOs 10,5 y tb lo he probado en linux y en el monitor de actividad es alucinante ver como se consume la memoria y pasa a inactive memory.

Os pongo un ejemplo del tipo de curl que uso en una funcion para abrir las paginas:
Código PHP:
// Cuando necesitemos abrir una url externa
function abrir($url){
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL$url);
    
curl_setopt($chCURLOPT_TIMEOUT30);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    
    
$code curl_exec ($ch);
    
curl_close($ch);
    
    return 
$code;

¿Deberia hacer un unset en la variable $code para vaciar esa variable? pero es que es absurdo por que como es un while luego la reescribe y borra lo que tubiera.

Alguna idea?
  #2 (permalink)  
Antiguo 12/09/2010, 23:16
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Scrapping: Memory exceded :S

30.000 y para que????
pregunto algo, cuales son las condiciones del while?
intentando darle un super tamaño en el php.ini (muchisimo más de lo actual) sigue igual?
con menos páginas???
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 13/09/2010, 01:16
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Scrapping: Memory exceded :S

Bueno en realidad son 100,000 pero he reducido a 30,000 para ver que pasaba, pero aun sigue fallando el script. No se si es por que macos y linux no manejan bien la memoria y con windows si que tiraria bien.

Las paginas que habren son paginas sencillas, tienen 10 o 15 kb, es una guia de videojuegos. Y voy parseando la info y guardandola en unas tablas.

Lo que no entiendo es por que el script no libera la memoria que ha utilizado en cada bucle del while... Ya que de ser asi no deberia usar mas de 20mb de ram y no 2000 como le tengo asignado y apenas puede hacer el bucle 1000 veces.
  #4 (permalink)  
Antiguo 13/09/2010, 01:38
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Scrapping: Memory exceded :S

Cita:
Iniciado por leif_sk8er Ver Mensaje
Bueno en realidad son 100,000 pero he reducido a 30,000 para ver que pasaba, pero aun sigue fallando el script. No se si es por que macos y linux no manejan bien la memoria y con windows si que tiraria bien.

Las paginas que habren son paginas sencillas, tienen 10 o 15 kb, es una guia de videojuegos. Y voy parseando la info y guardandola en unas tablas.

Lo que no entiendo es por que el script no libera la memoria que ha utilizado en cada bucle del while... Ya que de ser asi no deberia usar mas de 20mb de ram y no 2000 como le tengo asignado y apenas puede hacer el bucle 1000 veces.
entonces, ya probaste en windows y funciona bien??
uhm, revisa esto para linux
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 13/09/2010, 02:17
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Scrapping: Memory exceded :S

Cita:
Iniciado por mortiprogramador Ver Mensaje
entonces, ya probaste en windows y funciona bien??
uhm, revisa esto para linux
saludos
no probé aun en windows ahora mismo no tengo modo

Lo que me recomiendas que mire es la libreria curl, que si miras mi codigo que puse es exactamente esa libreria la que uso, que por cierto no solo es para linux, es para todo donde puedas poner apache ya que es para apache.
  #6 (permalink)  
Antiguo 13/09/2010, 02:33
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Scrapping: Memory exceded :S

Cita:
Iniciado por leif_sk8er Ver Mensaje
no probé aun en windows ahora mismo no tengo modo

Lo que me recomiendas que mire es la libreria curl, que si miras mi codigo que puse es exactamente esa libreria la que uso, que por cierto no solo es para linux, es para todo donde puedas poner apache ya que es para apache.
así es, eso es lo que enamora de apache y php
y es la misma versión?
has intentado con otras versiones de curl?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 13/09/2010, 19:43
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Scrapping: Memory exceded :S

Utilizo en mac la version mamp anterior a la actual, con lo que tiene la version curl la anterior tb, o varias anteriores, de todas formas en linux está todo super actualizado y tampoco.

En windows no lo he probado, se me olvido corregirte eso, no tengo windows a mano ahora mismo. Pero supongo que tampoco funcionará.

Nadie sabe forma de liberar memoria en un bucle while?
  #8 (permalink)  
Antiguo 13/09/2010, 19:47
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Scrapping: Memory exceded :S

Cita:
Iniciado por leif_sk8er Ver Mensaje
Utilizo en mac la version mamp anterior a la actual, con lo que tiene la version curl la anterior tb, o varias anteriores, de todas formas en linux está todo super actualizado y tampoco.

En windows no lo he probado, se me olvido corregirte eso, no tengo windows a mano ahora mismo. Pero supongo que tampoco funcionará.

Nadie sabe forma de liberar memoria en un bucle while?
revisa esto
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 13/09/2010, 23:07
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Scrapping: Memory exceded :S

Ostia mortiprogramador jajaja, justo ahora venia a postear la solucion que al final he encontrado y justamente es eso que has puesto.

Resulta que llevo unas 5 horas testeando y buscando informacion, habria terminado antes si 5 minutos despues de postear mi mensaje hubiera leido el tuyo... xD, y tras leer esto http://paul-m-jones.com/archives/262 he actualizado mi mamp a la ultima version para tener la funcion memory_get_usage y testear, y tras testear revisando toooodo el script he conseguido estabilizar en gran medida mi script.

Seguramente ya no pete :D, de todas formas voy a dejar todo el dia funcionando el script y a ver que pasa.

La solucion fue usar unset, como se explica en el tema que has puesto me libera toda la memoria, que cada vez eran de 1/2 mb, logicamente por eso se cortaba tan rapido incluso con 2000 megas de memory limit en el php.ini

Sin duda a partir de ahora voy a usar mucho unset.... algo que no usaba nunca.

Etiquetas: Ninguno
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 21:14.