Небольшие баги
-
Тогда можно сделать, чтобы была возможность выполнять несколько однотипных асинхронных функций параллельно. Хотел сделать что-то типа adblock, распарсив его фильтры и запретив запросы, но теперь не знаю, правильная ли это затея.
Я сделаю возможность отправлять список правил.
Вроде все проверял, даже в стандартных действиях "Присвоить глобальную переменную" везде убрал временную переменную, чтобы она не занимала память.
Хорошо, тогда присылайте скрипт со всеми файлами, которые он использует, будут проверять на утечки.
В браузере смотрю, когда запускаю скрипт. Мышь всегда в углу находится.
Когда браузер только создался, мышь всегда в 0,0 но ее можно передвинуть до первых действий по загрузке. Действия открыть браузер и закрыть браузер пересоздают процесс, в котором хранятся настройки, поэтому после их использования нужно устанавливать координаты мыши, прокси и т.д. заново.
-
@support said in Небольшие баги:
Хорошо, тогда присылайте скрипт со всеми файлами, которые он использует, будут проверять на утечки.
Так он в магазине, SiteVisitorPremium
@support said in Небольшие баги:
поэтому после их использования нужно устанавливать координаты мыши, прокси и т.д. заново.
Мышь ставлю прямо перед загрузкой страницы, после установки прокси и всех параметров
-
Так он в магазине, SiteVisitorPremium
Там 1 гиг уходит сразу потому что количество ресурсов очень большое, а пока БАС на большом количестве ресурсов не оптимизирован. Сколько у вас памяти уходит через час/день работы скрипта?
Если уверенны что память течет, пришлите свои настройки и дополнительные файлы, которые нужны для запуска.
Мышь ставлю прямо перед загрузкой страницы, после установки прокси и всех параметров
Понял, это только в режиме запуска, исправлю, сейчас можно подправить загрузив пустую страницу перед движением.
data:text/html,
-
@support 0_1490700648472_SiteVisitorPremium.xml
Через час замерю память, но перед зависанием не успевал посмотреть, всегда по-разному зависало.
Через час память держится на 660мб, плюс-минус. Может, дело не в утечке памяти, но сегодня ближе к вечеру еще раз проверю.
Через 2 часа - 740мб
9 часов - 790мб
20 часов - 800мб. Возможно, утечки памяти нет, но основной процесс грузит процессор на 50% (2 ядра), возможно из-за перегрева выключается. Замечал раньше, что когда два и более потоков работают с глобальной переменной, скрипт зависает на несколько секунд и начинает грузить процессор. Если удастся повторить, скину проект (баг был не в 100% случаях)
-
@blackhacker said in Небольшие баги:
2 часа - 740мб
9 часов - 790мб
20 часов - 800мбНе похоже на утечку, больше похоже на то, что данные для отчета накапливаются, возможно те же переменные для массива не удаляются.
Замечал раньше, что когда два и более потоков работают с глобальной переменной, скрипт зависает на несколько секунд и начинает грузить процессор.
А насколько большие данные туда грузятся? В некоторых случаях можно грузить туда не весь массив, а только те данные, которые изменились, это уменьшит нагрузку на проц.
-
@support said in Небольшие баги:
А насколько большие данные туда грузятся?
Не сильно большие вроде. В том же браузере они быстро парсятся, да и в BAS не всегда зависало, а в 30% случаев, поэтому не могу повторить это со 100% исходом. Запускаю несколько экземпляров одинакового скрипта (5-7), и один-два из них подвисают, остальные - нет.
В скрипте, где такое наблюдал, во всех потоках идет проверка глобальной переменной, если в ней нет данных (пустой объект), то поток парсит данные для дальнейшей работы и добавляет в глобальную переменную. Если данные есть, поток работает уже с ними.Может, я опять ошибся с логикой скрипта, и есть более простой подход? Нужно, чтобы каждый поток был "универсальным", и обрабатывал "общие" данные, которые нужно обработать, и не был привязан к какому-то одному действию. Возьму для примера мой скрипт, который посещает сайты. Там каждый поток не привязан к сайту, а выполняет посещение на том сайте, который нужен в данный момент (чтобы поток работал всегда, а не ожидал следующего действия, т.к. привязан к одному сайту). Но для этого приходится каждый раз читать глобальную переменную, перебирая сайты и выбирать подходящий. Подскажите, если есть более простой вариант.
-
@support Переделал скрипт, чтобы профили брались не из файлов, а из базы. Теперь занимает всего 200мб памяти и не грузит проц, что очень хорошо. Но в глобальную переменную сохранялось не столько уж много данных. Массив из примерно 1-2к элементов. Но занималось 800мб, и была постоянная нагрузка на проц и зависание, при меньших настройках - сейчас при потреблении 200мб скрипт обрабатывает на 2 сайта больше.
-
@blackhacker а было через ресурсы или открытие файла?
-
@venom777 Было сделано через ресурс-строку, в котором указывался путь к файлам, затем в массив заносилась инфа о последнем изменении файла и путь к файлу, файлов было около тысячи. Сам контент файлов не хранился в массиве, массив записывался в глобальную переменную, периодически из нее бралась и обновлялаь инфа каждым потоком