?

Log in

No account? Create an account
 
 
28 January 2017 @ 01:01 pm
Web crawler hangs  
Our web crawler hanged. Again.
It looks like it hangs with the frequency of about 1 hang per 1 million web page downloads.
Does not timeout. Does not crash. Just hangs.
Fortunately, other threads in our PostJobFreeService keep running.
(Until AngleSharp HTML parser would crash the whole PostJobFreeService on some weird HTML page, of course.)

Unfortunately, crawler hang is not reproducible: the same page can be downloaded without any problems on the next attempt. Or just in a browser.
But once in 1M downloads something weird happens: our crawler successfully passes HTTP handshake with the remote web server (so no HTTP connection timeout), but then hangs.

For our crawler we are using standard HttpWebRequest class from .NET framework.
Should we crawl with something else?

Or is it inevitable that web crawler would hang eventually and our watchdog should simply restart corresponding thread?

Discussion in Livejournal: http://dennisgorelik.livejournal.com/124693.html

Originally posted at: http://dennisgorelik.dreamwidth.org/122942.html
Tags: , , ,
 
 
 
Сисадмин-любительulrith on January 28th, 2017 06:53 pm (UTC)
Венда, .NET - вот уж и правда wtf :)
You should use industry standard solutions in Linux universe...
provokatorzprovokatorz on January 28th, 2017 10:37 pm (UTC)
Linux - это следующий шаг развития. :)
Dennis Gorelikdennisgorelik on January 29th, 2017 12:27 am (UTC)
Может ты ещё и C# предложишь при переезде на linux на что-то поменять?
provokatorzprovokatorz on January 29th, 2017 12:33 am (UTC)
Я думал ты заметишь смайлик в конце.
"... а получилось как всегда"
(no subject) - dennisgorelik on January 29th, 2017 12:49 am (UTC) (Expand)
Dennis Gorelikdennisgorelik on January 29th, 2017 12:38 am (UTC)
Are you implying that Linux tools would have less bugs?
Сисадмин-любительulrith on January 29th, 2017 07:27 am (UTC)
Definitely!
That's why they're used so widely over the world for network/web/mail/etc applications.
Dennis Gorelikdennisgorelik on January 29th, 2017 10:36 am (UTC)
1) Microsoft tools are also widely used.

2) If switching to Linux - are you suggesting to keep C# or switch to another language?

3) What about SQL Server - switch to PostgreSQL while transitioning to Linux?
(no subject) - ulrith on January 29th, 2017 11:44 am (UTC) (Expand)
(no subject) - dennisgorelik on January 29th, 2017 12:24 pm (UTC) (Expand)
(no subject) - ulrith on January 29th, 2017 12:30 pm (UTC) (Expand)
(no subject) - dennisgorelik on January 29th, 2017 12:46 pm (UTC) (Expand)
(no subject) - ulrith on January 29th, 2017 01:14 pm (UTC) (Expand)
(no subject) - dennisgorelik on January 29th, 2017 02:43 pm (UTC) (Expand)
occam_agaoccam_aga on January 28th, 2017 07:30 pm (UTC)
Dennis Gorelikdennisgorelik on January 29th, 2017 12:45 am (UTC)
Huh.
Did you try it yourself?

How many pages did it process for you so far?
Did it hung?

There is an opinion that crawlers are inherently unreliable:
http://dennisgorelik.livejournal.com/124693.html?thread=2206741#t2206741
occam_agaoccam_aga on January 29th, 2017 05:28 pm (UTC)
I did try it myself, about five years ago. Even got the perf numbers, but totally forgot what they were and they are irrelevant by now anyway.

Tried to make a people search engine which would process requests like "find c# developers in Seattle with more than 5 years experience, willing to switch job"

The sequence of making a crawler was:
1) Started writing my own bot
2) Did some research and found existing Abot
3) Did more research and found that entire Internet is available for free in a parsed form somewhere in Amazon
(no subject) - dennisgorelik on January 30th, 2017 12:02 am (UTC) (Expand)
(no subject) - occam_aga on January 30th, 2017 01:38 am (UTC) (Expand)
(no subject) - dennisgorelik on January 30th, 2017 03:35 am (UTC) (Expand)
(no subject) - dennisgorelik on January 30th, 2017 03:37 am (UTC) (Expand)
(no subject) - occam_aga on January 30th, 2017 04:04 am (UTC) (Expand)
Common Crawl on AWS - dennisgorelik on January 30th, 2017 09:07 am (UTC) (Expand)
Христофор Арьеф: pic#125704228freeborn on January 28th, 2017 08:02 pm (UTC)
Дебаггер приатиачить или крашдамп снять нельзя?
Dennis Gorelikdennisgorelik on January 29th, 2017 12:28 am (UTC)
Может быть и можно. Но нужно сначала научиться это делать.
С чего начать и сколько времени подобное исследование займёт?
Yaturkenzhensirhiv - a handheld spyyatur on January 28th, 2017 11:04 pm (UTC)
Я думаю, задачу нужно решать кардинально. Кроулеры будут падать, зависать, сжирать всю память... Я бы завел какую-нибудь очередь (Rabbit MQ?), куда складываются адреса, которые надо прокроулить. И десяток процессов-кроулеров (НЕ потоков, а именно процессов), которые по этой очереди лазят. И процесс-сторож, который следит за тем, что если кто-то их кроулеров не отвечает на сигналы, то убить и перезапустить. Возможно, сделать кроулеры 32-битными, чтобы не могли сожрать всю память.
Dennis Gorelikdennisgorelik on January 29th, 2017 12:25 am (UTC)
> Кроулеры будут падать, зависать, сжирать всю память...

Откуда ты знаешь, что эти проблемы с краулерами неизбежны?

> Rabbit MQ?

Почему бы не обычный SQL server?

> И десяток процессов-кроулеров

Мы пока что и один поток полностью не загружаем, чтобы нас вдруг веб сервера банить не начали.

> И процесс-сторож, который следит за тем, что если кто-то их кроулеров не отвечает на сигналы, то убить и перезапустить.

А убивать потоки вместо процессов нельзя?
Yaturkenzhensirhiv - a handheld spy: Веселый носорогyatur on January 29th, 2017 12:42 am (UTC)
> Откуда ты знаешь, что эти проблемы с краулерами неизбежны?

Из опыта. Если сделать что-то миллион раз с разными данными, то рано или поздно наткнешься на баг. Собственно, ты это очень хорошо продемонстрировал своими жалобами.

> Можно и sql сервер. Но там таблицы. Превращать их в очередь задач придется вручную. А в rabbitmq уже сразу очередь.

> А убивать потоки вместо процессов нельзя?

Можно. Но процессы более надежны - если кроулер и сторож в одном процессе, то у кроулера намного больше шансов умереть, прихватив с собой на тот свет весь процесс вместе со сторожем. Например через stack overflow.


(no subject) - dennisgorelik on January 29th, 2017 01:03 am (UTC) (Expand)
(no subject) - yatur on January 29th, 2017 02:41 am (UTC) (Expand)
(no subject) - dennisgorelik on January 29th, 2017 03:11 am (UTC) (Expand)