|
|
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
ShadowSmile A. Fig Lee Спасибо, что-то я стормозил =) Еще вопросик =) Подвисают потоки, в самом конце из 100 остаётся ~25-30 потоков которые явно не стучатся в сеть... Я предпологаю что может подвисает стрим где-то в середине сайта, а httpclient ждет бесконечно данных... Может такое быть? или я не там ищу... Есть идеи как с этим бороться и вычислять пробему? хмм.. много чего может быть.. Я бы log4j прикрутил и постил debug messages - до и после.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2007, 17:47:06 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
Поставил 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. Как видно если поток работает больше минуты то он умирает... однако этого в реальности не происходит т.к. в консоль выходит например 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)Ставить какой-то внутренний таймаут для сокета... как? Заранее благодарен за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2007, 21:09:48 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
для начала я бы проверил - персистент ли проблема на тех же сайтах, если да, то проверил не делает ли сайт "chunked" encoding - ето может быть одной из проблем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2007, 23:25:16 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
А можно поподробнее что есть "chunked" encoding ...В общем списке есть пара ошибок с таким обозначением, я перепроверю, но вроде эти потоки нормально завершаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2007, 23:35:51 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 17:50:47 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
Спасибо буду знать =) А проблему походу решил банальным socket timeout, буду еще дальше тестировать но вроде все ок. Еще раз спасибо за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:52:55 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
Better Вы это с такой уверенностью говорите, что я даже начинаю верить в эту чушь! Google, видимо, как раз один из таких мелких, мало популярных сайтов ? См. аттач. А это смотря с какого айпишника парсер запущен. Иногда задержки 5 сек. между запросами достаточно, а иногда и 30 сек. мало, сразу выскакивает "We are sorry...". ИМХО у гулги хитромудрый фильтр стоит, который сечет такие запросы и на основании этого вносит ИП в определенную зону доверия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 14:11:36 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
A. Fig LeeНа самом деле быстро делать нельзя. После каждого запроса к вебсайту надо делать интервал секунд 5. По 2м причинам: 1) перегружаете сайт 2) на приличных сайтах ето будет обнаружено и Вам отрубят доступ. Так что mysql должен справится. Проще правда все было бы на скриптах заделать..На каких скриптах, позвольте поинтересоваться? На .sh? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2007, 15:57:26 |
|
||
|
Web Crawler
|
|||
|---|---|---|---|
|
#18+
craw16r A. Fig LeeНа самом деле быстро делать нельзя. После каждого запроса к вебсайту надо делать интервал секунд 5. По 2м причинам: 1) перегружаете сайт 2) на приличных сайтах ето будет обнаружено и Вам отрубят доступ. Так что mysql должен справится. Проще правда все было бы на скриптах заделать..На каких скриптах, позвольте поинтересоваться? На .sh?что вы? как можно? только (и исключительно) на .bat! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2007, 17:08:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34786606&tid=2144670]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 335ms |
| total: | 491ms |

| 0 / 0 |
