Śledź martwe instancje WebDriver podczas zadania równoległego

Widzę dziwne martwe instancje z uruchomionymi równoległymi testami naprężenia w sieci z wykorzystaniem zagnieżdżonej pętli przy użyciu Selenium WebDriver, prostym przykładem jest, powiedzmy, trafienie 300 unikalnych stron ze 100 odciskami każdy.

Jestem „pomyślnie” uzyskując 4 - 8 instancji WebDrivera przy użyciuThreadLocal<FirefoxWebDriver> aby wyizolować je na wątek zadania, a MaxDegreeOfParallelism na instancji ParallelOptions, aby ograniczyć wątki. Dzielę partycje i paralelizuję tylko zewnętrzną pętlę (zbiór stron) i sprawdzam.IsValueCreated naThreadLocal<> kontener na początku metody „długotrwałego zadania” każdej partycji. Aby ułatwić późniejsze czyszczenie, dodam każdą nową instancję do ConcurrentDictionary z kluczem wątku.

Niezależnie od tego, jakiej strategii paralelizacji lub partycjonowania używam, instancje WebDriver od czasu do czasu wykonują jedną z następujących czynności:

Uruchom, ale nigdy nie wyświetlaj adresu URL ani nie uruchamiaj wyświetleniaUruchom, uruchom dowolną liczbę wyświetleń, a następnie po prostu usiądź bezczynnie w pewnym momencie

Gdy zdarzy się którykolwiek z nich, pętla równoległaostatecznie wydaje się, że wątek nic nie robi i tworzy nową partycję. Jeślin to liczba dozwolonych wątków, co powoduje posiadanien produktywne wątki tylko w około 50-60% przypadków.

Czyszczenie nadal działa dobrze na końcu; mogą istnieć 2 lub więcej otwartych przeglądarek, ale zarówno produktywne, jak i nieproduktywne są czyszczone.

Czy istnieje sposób na monitorowanie tych bezużytecznych instancji WebDriver i a) natychmiastowe oczyszczenie ich, plus b) sprawienie, aby pętla równoległa natychmiast zastąpiła segment zadania, zamiast pozostawać w tyle przez kilka minut, jak to często ma teraz miejsce?

questionAnswers(2)

yourAnswerToTheQuestion