cURL читает URL из файла - процессы спят - PullRequest
0 голосов
/ 12 декабря 2018

возможно, у кого-то есть идея, как решить мою проблему с помощью некоторых скриптов bash.

Справочная информация. У меня есть файл (urls.txt) с 30 URL-адресами (по одному URL-адресу на строку), который используется в цикле while для создания 30 параллельных потоков с помощью cURL для одновременной загрузки / доступа к этим URL-адресам (файл cookieтребуется для доступа к URL).Скрипт работает всего около 10 секунд и запускается и заканчивается cronjob.Всего открыто довольно много параллельных процессов cURL.Что приводит к проблеме многих процессов сна.ulimit -u установлен в 47828, а ulimit -n в 1024. Сценарий работает в системе Debian.Я следил за процессами / памятью, когда скрипт запущен с топ -d1, и осталось достаточно оперативной памяти.Когда запущено около 1000 процессов, оно имеет почти равное количество спящих процессов.

Цель: в одном из 30 URL-адресов есть в определенный промежуток времени встроенный JavaScript.Javascript считывает куки, и сервер обрабатывает данные.Мне нужно быть очень быстрым, чтобы быть одним из первых людей (только первые 20 пользователей считают), чтобы найти правильный URL, где встроен скрипт.Таким образом, параллельная загрузка 30 URL-адресов в цикле.

Вопросы: 1) Поможет ли увеличить ulimit -n до неограниченного, чтобы избежать спящих процессов и выполнить их все?Сценарий должен выполняться как можно быстрее, и спящие процессы здесь не помогают.

2) В настоящее время я загружаю выходные данные URL (с помощью curl -O -J).Будет ли это предотвращать спящие процессы, если я не буду загружать файлы?Процессы curl все равно будут работать, но файл не будет записан на сервере, чтобы избежать ограничений на количество открытых файлов?Мне даже не нужны загруженные файлы, потому что мне просто нужно получить доступ к 30 URL-адресам с данными cookie.

Текущий цикл while выглядит следующим образом.

while true: do

nohup cat urls.txt | xargs -P30 -n1 curl -b cookie.txt -O -J > /dev/null 2>&1 &

done
...