Ребят, тут у меня непонятная ситуация, помогите плиз разобраться.
У меня задача, прочекать большое количество доменов на предмет определенного текста в HTML на главной странице сайта. Чекнуть надо разово, а не на постоянку. Доменов примерно 100к
Под это дело я взял сервер с гигабитным каналом, 10 гигов оперативки, двухъядерный процессор.
Написал скрипт, который через curl многопоточно чекает сайты. Для начала поставил 500 потоков, всё было нормально пару дней, потом отвалился коннект в инет, написал хостеру в чем дело, они отвечают, что ваш скрипт слишком много UDP сокетов открывает, и типа в линуксе на них ограничение стоят, после которых якобы валится интернет.
Ок, я снизил количество потоков, но ничего не помогает, пару дней работает, потом инет валится.
Начал самостоятельно дебажить проблему.
В момент, когда опять интернет отвалился, я выполняю команду: netstat -an
и наблюдаю почти 30к одинаковых строк:
udp 1280 0 [IP моего сервера]:55306 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:38922 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:38923 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:55307 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:47115 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:47116 8.8.8.8:53 ESTABLISHED
udp 1280 0 [IP моего сервера]:55308 8.8.8.8:53 ESTABLISHED
И так 30к. На сервере разумеется прописаны гугловские днски.
В моей базе доменов которые я чекаю, понятное дело, очень много доменов которые или не существуют, или никуда не привязаны, или не отвечают по таймауту, ну грубо говоря ошибочные.
То есть, складывается ощущение, что если при чекинге через курл сайт оказывается нерабочим, то соединение с ним не закрывается, а продолжает висеть... как то так.
В самом курле у меня вообще стоит таймаут в 5 секунд, мол если сайт не ответил, то закрываем соединение, и едем дальше.
Я даже реализовал костыль, один раз в сутки все потоки останавливаются ровно на 30 минут, после чего продолжают работу. Смысл костыля был в том, чтобы возникающие потоки (открытые сокеты) сами собой закрылись, и не накапливались, но не помогает.
И почему то они висят именно при попытке отрезолвить доменное имя на гуглоайпишнике.
На сервере используется операционка: Linux vps8914 3.2.0-126-generic #169-Ubuntu SMP Fri Mar 31 14:15:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Буду признателен за любую подсказку, в какую сторону копать, чтобы решить проблему этих накапливающихся сокетов\потоков, и нормально многопоточно чекать сайты.