Foros del Web » Programación para mayores de 30 ;) » Java »

Saturación al hacer múltiples conexiones con Jsoup

Estas en el tema de Saturación al hacer múltiples conexiones con Jsoup en el foro de Java en Foros del Web. Hola, estoy tratando de extraer y parsear el código fuente de algunas páginas web y como herramienta estoy utilizando la librería jsoup. El problema está ...
  #1 (permalink)  
Antiguo 06/09/2014, 03:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 31
Antigüedad: 14 años, 6 meses
Puntos: 0
Saturación al hacer múltiples conexiones con Jsoup

Hola, estoy tratando de extraer y parsear el código fuente de algunas páginas web y como herramienta estoy utilizando la librería jsoup. El problema está que cuando uso multihilos, con la clase ExecutorService, para hacer extracciones en paralelo a veces se satura la conexión a Internet, y tengo que esperar unos segundos para poder extraer de nuevo o para poder navegar por la red.
Por ejemplo, si ejecutó más de 60 hilos en paralelo para conectarme a Google, la conexión se satura y no descarga nada. Con otros servidores se satura después de los 30 hilos y con otros después de los 200.
Lo que me gustaría saber es a que se debe esto, ya que sabiendo que ocurre puedo hacer una aplicación más robusta que se autolimite. Estoy casi seguro que no se debe a las características de mi computadora porque ejecute procesos pesados con una cantidad mucho mayor de hilos y no pasó nada, solo me saltan los problemas cuando me conecto a Internet.
Los datos de mi conexión son:
1)Ancho de banda de 6Mb
2)Modem que recibe la señal de la calle.
3)Router inalámbrico que distribuye la señal en casa.

Cualquier otro dato que necesiten no duden en avisarme. Gracias!
  #2 (permalink)  
Antiguo 06/09/2014, 04:48
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Saturación al hacer múltiples conexiones con Jsoup

Buenas,

Es normal. Si abres decenas de conexiones con un servidor, este interpretará que se está haciendo un ataque DoS y bloqueará los accesos desde dicha IP durante un tiempo.

Sobre DoS:
http://www.opensourceforu.com/2011/04/securing-apache-part-8-dos-ddos-attacks/

Sobre como se protegen los servidores (Apache en este caso):
http://www.techrepublic.com/blog/smb-technologist/secure-your-apache-server-from-ddos-slowloris-and-dns-injection-attacks/

Deberías ser ser menos agresivo a la hora de hacer dichas conexiones para que los servidores no te rechacen.


Un saludo
  #3 (permalink)  
Antiguo 06/09/2014, 05:05
 
Fecha de Ingreso: mayo-2010
Mensajes: 31
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Saturación al hacer múltiples conexiones con Jsoup

Gracias Profesor_Falken por la respuesta. En un momento pensé lo que dijiste pero no estaba seguro, me dejé llevar por la idea de extraer la mayor cantidad de información en el menor tiempo posible. Voy a controlar la cantidad de hilos que abro pero tengo otra consulta.
Si un servidor al que le hice las conexiones masivas me rechazó, ¿por qué tampoco podía entrar a facebook, outlook, diarios online, etc? Pensé que podía ser un problema de mi computadora que no permitía tantas conexiones y no un bloqueo por DoS. Gracias!
  #4 (permalink)  
Antiguo 06/09/2014, 05:46
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: Saturación al hacer múltiples conexiones con Jsoup

Hola:

El sistema operativo impone un límite de conexiones simultáneas abiertas que no es demasiado alto. Si lo alcanzas, no puedes abrir más conexiones. Ojo, las conexiones deben ser simultáneas, es posible si lanzas muchos hilos, que no todos abran a la vez, por eso a veces tienes unos límites y otras veces otros, dependiendo de lo que tarde cada hilo en abrir, mantener y cerrar la conexión.

Busca cosas sobre "file handle limit" en tu sistema operativo para ver cómo incrementarlo. Tanto en linux como en windows hay forma de cambiar esos límites. En los windows antiguos se hacía sobre el fichero config.sys, en los nuevos (vista en adelante) posiblemente se hace en el registro.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 06/09/2014 a las 05:57
  #5 (permalink)  
Antiguo 06/09/2014, 15:22
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Saturación al hacer múltiples conexiones con Jsoup

Buenas,

Ese dato que comentas ahora es efectivamente muy importante.

Podrías ser la limitación que comenta chuidiang, aunque me resulta un poco extraño ya que las limitaciones tanto de windows como del kernel linux en cuanto a conexiones tcp se cuentan por cientos o miles y no son 30 o 60. Por otro lado las conexiones http son stateless, por lo que al mismo tiempo no deberías tener tantas (gran parte del tiempo de proceso del thread se dedicaría a procesar el contenido con jsoup).

En cualquier caso, al final creo que es cuestión de que hagas pruebas para ver cual es el ritmo de "web scraping" óptimo.


Un saludo

Etiquetas: clase, conexiones
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 22:50.