Поток зависает



  • В скрипте SiteVisitorPremium стали зависать потоки на этом участке кода

    logExt('Next visit time: ' + (new Date([[SITE]].nextVisitTime * 1000)) + ', timestamp: ' + [[SITE]].nextVisitTime + ', current time: ' +(new Date([[TIME]] * 1000)) + ', timestamp: ' + [[TIME]], 3);
    RS("site_"+[[SITE]].id+"_viewing_depth", false, false)!
    [[SITE]].viewing_depth = _result().get();
    RS("site_"+[[SITE]].id+"_move_elements_count", false, false)!
    [[SITE]].move_elements_count = _result().get();
    RS("site_"+[[SITE]].id+"_visit_time", false, false)!
    [[SITE]].visit_time= _result().get();
    RS("site_"+[[SITE]].id+"_activity_after_visit_time", false, false)!
    [[SITE]].activity_after_visit_time = _result().get(); 
    RS("site_"+[[SITE]].id+"_referers_list", false, false)!
    [[SITE]].referer = _result().get();
    logExt('Viewing depth: ' + [[SITE]].viewing_depth, 3);
    

    В лог выводится

    [00:02:24] Поток №30 : Next visit time: Tue Mar 14 2017 00:03:03 GMT+0500 (, timestamp: 1489431783, current time: Tue Mar 14 2017 00:02:24 GMT+0500 (, timestamp: 1489431744
    

    далее от скрипта ничего не слышно, хотя должно идти

    Viewing depth:
    

    Проверил в логе несколько потоков, лог пропадает именно на этом месте.
    Браузер открывается, окно about:blank. Зависшие потоки потребляют по минимуму памяти (перед началом работы идет сброс с перезапуском процесса)
    Возможно, дело в нехватке памяти, т.к. занято 92% или более. Файл подкачки стоит 8гб, но он не помогает (http://community.bablosoft.com/topic/1366/файл-подкачки)

    Позже проверил, вроде дело не в памяти, запустил 50 потоков - результат такой же. Ранее и на 60 потоках старая версия скрипта работала, не было такого.



  • @blackhacker
    Эта строка RS("site_"+[[SITE]].id+"_referers_list", false, false)!

    значит ждать ресурс с именем "site_"+[[SITE]].id+"_referers_list".
    Скорее всего скрипт зависает именно здесь потому что ждет пока в ресурсе появятся данные.
    Тут 2 варианта, либо данные закончились, либо заняты другим потоком.
    Напоминаю, что в БАС есть отчет о ресурсах, и можно это проверить прямо во время работы.

    0_1489753432094_ResourceReport.png



  • @support А какие именно цифры указаны в отчете? Количество ресурсов? Но тогда не показывает, сколько ресурсов доступно. Сейчас показывает так:
    site_1_referers_list: 96
    site_2_referers_list: 28
    site_3_referers_list: 224
    site_4_referers_list: 56
    site_5_referers_list: 76
    site_6_referers_list: 228
    user_agents_file: 15161
    proxy_file: 5500

    Почти все потоки зависли.



  • @blackhacker Отчет показывает сколько ресурсов доступно и в том числе те ресурсы, которые заняты другими потоками.



  • @support Значит, свободные ресурсы все-таки есть? Нашел ошибку, исправил

    RS("site_"+[[SITE]].id+"_referers_list", false, false)!
    

    на

    RS("site_"+[[SITE]].id+"_referers_list", true, false)!
    

    В использовании ресурса прокси прописано так (он работает правильно). Что значат эти доп. параметры?



  • @blackhacker said in Поток зависает:

    Значит, свободные ресурсы все-таки есть?

    Не факт, что они свободные.

    Что значат эти доп. параметры?

    Первый - имя ресурса.
    Второй - не включать повторное использование
    Третий - не завершать скрипт при отсутствии ресурса.



  • @support Как BAS определяет, освободился ли ресурс? В теории, минимальное количество строк в ресурсе 28. Потоков запущено 40. Не могут же 40 потоков занимать все 28 строк (при условии, что ресурсы берутся каждый раз из разного источника, а не одновременно из одного)



  • @blackhacker

    Как BAS определяет, освободился ли ресурс?

    Если ресурс не использует ни один поток - он свободен.
    Поток перестает использовать ресурс, если поток перегружается, либо поток вызывает действие "Удалить текущий элемент", либо метод success fail или die на ресурсе, либо если он берет другой ресурс функцией RS.

    Не могут же 40 потоков занимать все 28 строк

    Может и один поток использовать сколько угодно. Тут все зависит отк срипта.



  • @support У меня в цикле выполняются посещения, любой свободный от посещения поток ждет времени следующего посещения и берет данные из ресурса (список рефереров), который относится к сайту, который нужно посетить. Поток не привязан к какому-то конкретному сайту, берется сайт из списка, который нужно посетить раньше других. Может ли в таком случае поток израсходовать весь ресурс? Количество успешных и неудачных выполнений стоит 9999999, убрана галочка "использовать повторно".



  • @blackhacker said in Поток зависает:

    Может ли в таком случае поток израсходовать весь ресурс?

    Да, может. Например,
    ресурс состоит из 3 строк и работает в 5 потоков.
    1, 2 и 3 потоки берут по ресурсу и не отпускают, допустим работают с ним вечно в цикле.
    Тогда 4 и 5 потоки будут ждать пока 1 2 и 3 отпустят ресурс и зависнут так как количество одновременных использований выставлено в 1.
    Они отвиснут только когда потоки 1 2 и 3 отпустят ресурсы, но это может произойти не скоро, я не знаю, как у вас устроена логика.



  • @support Да, поставил количество одновременных использований больше, теперь не зависает, спасибо)


Log in to reply
 

  • 5
  • 13
  • 6
  • 6
  • 4
  • 6
  • 2
  • 4