powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Crawler
9 сообщений из 34, страница 2 из 2
Web Crawler
    #34379174
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowSmile A. Fig Lee Спасибо, что-то я стормозил =)


Еще вопросик =)

Подвисают потоки, в самом конце из 100 остаётся ~25-30 потоков которые явно не стучатся в сеть... Я предпологаю что может подвисает стрим где-то в середине сайта, а httpclient ждет бесконечно данных... Может такое быть? или я не там ищу... Есть идеи как с этим бороться и вычислять пробему?

хмм.. много чего может быть..
Я бы log4j прикрутил и постил debug messages - до и после..
...
Рейтинг: 0 / 0
Web Crawler
    #34379298
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставил youkit + проверку на время выполнения...
Код выглядит сейчас так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
   private  String getSiteBody(URL url)
    {
        String res = "";
         if  (url !=  null )
        {

            System.out.println(url);
             long  start = System.currentTimeMillis();
            HttpClient client =  new  HttpClient();
            client.getHostConfiguration().setHost(url.getHost(), url.getPort(), url.getProtocol());
            client.getParams().setParameter("http.useragent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061003 Firefox/2.0");
            GetMethod get =  new  GetMethod(url.getPath());
            get.setQueryString(url.getQuery());
            client.getHttpConnectionManager().getParams().setConnectionTimeout( 15000 );

             try 
            {

                 if  (client.executeMethod(get) ==  200 )
                {

                    BufferedReader in =  new  BufferedReader( new  InputStreamReader(get.getResponseBodyAsStream()));

                    String line = in.readLine();
                    StringBuilder sb =  new  StringBuilder();

                     int  ln_size =  0 ;
                     if  (line !=  null )
                    {
                        ln_size += line.length();
                    }
                     long  cur = System.currentTimeMillis();
                     while  (line !=  null  && ln_size <  120000  && (cur - start) <=  60000 )
                    {
                        sb.append(line);
                        sb.append("\n");


                        line = in.readLine();
                         if  (line !=  null )
                        {
                            ln_size += line.length();
                        }
                        cur = System.currentTimeMillis();

                    }
                    in.close();
                    System.out.println("Url:" + url + " size:" + ln_size + " time:" + (cur - start));
                     if  (ln_size >=  120000  || (cur - start) >=  60000 )
                    {
                        res =  null ;
                    }  else 
                    {
                        res = sb.toString();
                    }
                }

            }  catch  (IOException e)
            {
                e.printStackTrace();
            }  finally 
            {

                get.releaseConnection();
            }
        }
         return  res;
    }

Как видно если поток работает больше минуты то он умирает... однако этого в реальности не происходит т.к. в консоль выходит например
Url: someurl size:0 time:347850 или Url: someurl size:8012 time:601234

А youkit выдал что потоки висят в состоянии


http://someurl/... [RUNNABLE]
java.net.SocketInputStream.socketRead0(native method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
java.io.BufferedInputStream.read(BufferedInputStream.java:313)
org.apache.commons.httpclient.ContentLengthInputStream.read(ContentLengthInputStream.java:169)
org.apache.commons.httpclient.ContentLengthInputStream.read(ContentLengthInputStream.java:183)
org.apache.commons.httpclient.ChunkedInputStream.exhaustInputStream(ChunkedInputStream.java:368)
org.apache.commons.httpclient.ContentLengthInputStream.close(ContentLengthInputStream.java:117)
java.io.FilterInputStream.close(FilterInputStream.java:159)
org.apache.commons.httpclient.AutoCloseInputStream.notifyWatcher(AutoCloseInputStream.java:176)
org.apache.commons.httpclient.AutoCloseInputStream.close(AutoCloseInputStream.java:140)
sun.nio.cs.StreamDecoder$CharsetSD.implClose(StreamDecoder.java:505)
sun.nio.cs.StreamDecoder.close(StreamDecoder.java:198)
java.io.InputStreamReader.close(InputStreamReader.java:187)
java.io.BufferedReader.close(BufferedReader.java:502)
SiteAnalizer.getSiteBody(SiteAnalizer.java:120)
SiteAnalizer.Analize(SiteAnalizer.java:37)
SiteAnalizerThread.run(SiteAnalizerThread.java:27)

т.е. проблемма вот тут: line = in.readLine(); как я понимаю....
line может быть любого размера так? Соответственно может качаться до посинения если сайт супер тормозной...

Как обходить это?
1)Я так понимаю подругому читать стрим - как?
2)Ставить какой-то внутренний таймаут для сокета... как?

Заранее благодарен за ответы.
...
Рейтинг: 0 / 0
Web Crawler
    #34379362
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала я бы проверил - персистент ли проблема на тех же сайтах, если да, то проверил не делает ли сайт "chunked" encoding - ето может быть одной из проблем
...
Рейтинг: 0 / 0
Web Crawler
    #34379371
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно поподробнее что есть "chunked" encoding ...В общем списке есть пара ошибок с таким обозначением, я перепроверю, но вроде эти потоки нормально завершаются.
...
Рейтинг: 0 / 0
Web Crawler
    #34381215
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowSmileА можно поподробнее что есть "chunked" encoding ...В общем списке есть пара ошибок с таким обозначением, я перепроверю, но вроде эти потоки нормально завершаются.

Когда размер передаваемого файла заранее не известен, или надо симулейт "бесконечный даунлоад", мона использовать чанкед енкодинг - сервер передает данные пачками, размер каждой пачки передается перед етой пачкой..

авторThe content can be broken up into a number of chunks; each of which is prefixed by its size in bytes. A zero size chunk indicates the end of the response message. If a server is using chunked encoding it must set the Transfer-Encoding header to "chunked".

Chunked encoding is useful when a large amount of data is being returned to the client and the total size of the response may not be known until the request has been fully processed. An example of this is generating an HTML table of results from a database query. If you wanted to use the Content-Length header you would have to buffer the whole result set before calculating the total content size. However, with chunked encoding you could just write the data one row at a time and write a zero sized chunk when the end of the query was reached.
...
Рейтинг: 0 / 0
Web Crawler
    #34381350
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо буду знать =)
А проблему походу решил банальным socket timeout, буду еще дальше тестировать но вроде все ок. Еще раз спасибо за участие.
...
Рейтинг: 0 / 0
Web Crawler
    #34381967
leafox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Better
Вы это с такой уверенностью говорите, что я даже начинаю верить в эту чушь! Google, видимо, как раз один из таких мелких, мало популярных сайтов ? См. аттач.

А это смотря с какого айпишника парсер запущен. Иногда задержки 5 сек. между запросами достаточно, а иногда и 30 сек. мало, сразу выскакивает "We are sorry...". ИМХО у гулги хитромудрый фильтр стоит, который сечет такие запросы и на основании этого вносит ИП в определенную зону доверия.
...
Рейтинг: 0 / 0
Web Crawler
    #34786606
craw16r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A. Fig LeeНа самом деле быстро делать нельзя.
После каждого запроса к вебсайту надо делать интервал секунд 5. По 2м причинам:
1) перегружаете сайт
2) на приличных сайтах ето будет обнаружено и Вам отрубят доступ.

Так что mysql должен справится.
Проще правда все было бы на скриптах заделать..На каких скриптах, позвольте поинтересоваться? На .sh?
...
Рейтинг: 0 / 0
Web Crawler
    #34786673
Andrej Falaleev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
craw16r A. Fig LeeНа самом деле быстро делать нельзя.
После каждого запроса к вебсайту надо делать интервал секунд 5. По 2м причинам:
1) перегружаете сайт
2) на приличных сайтах ето будет обнаружено и Вам отрубят доступ.

Так что mysql должен справится.
Проще правда все было бы на скриптах заделать..На каких скриптах, позвольте поинтересоваться? На .sh?что вы? как можно? только (и исключительно) на .bat!
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Crawler
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]