Chromenode creates a lot of folders in tmp directory

Viewed 22

I have a multymodule project, that have 5 containers in docker. And I use selenium hub 4.3 and chrome node 4.3 for taking screenshots in usual flow (not for tests). The problem is that chrome node creates a lot of folders in tmp directory, and this leads to overusing memory in docker containers. That is my settings for docker containers with selenium and chrome

     selenium_hub:
    image: selenium/hub:4.3
    ports:
      - "4444:4444"
    networks:
      - selenium
  chrome:
    image: selenium/node-chrome:4.3
    shm_size: '2gb'
    depends_on:
      - selenium_hub
    environment:
      - HUB_HOST=selenium_hub
      - SE_EVENT_BUS_HOST=selenium_hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=2
    networks:
      - selenium

and this is my truncated code of the method that takes screenshots

public ImageDto getScreenshot() {
        DesiredCapabilities dc = new DesiredCapabilities();
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--headless");
        chromeOptions.addArguments("--no-sandbox");
        chromeOptions.addArguments("--disable-dev-shm-usage");
        dc.merge(chromeOptions);
        if (chromeDriver == null || chromeDriver.getSessionId() == null)
            chromeDriver = new RemoteWebDriver(new URL(seleniumHubUrl), dc);
        WebElement widgetElement = chromeDriver.findElement(By.className(widget.getWidgetDivClassname()));
        File screenshot = ((TakesScreenshot) chromeDriver).getScreenshotAs(OutputType.FILE);
        BufferedImage f = ImageIO.read(screenshot);
        if (chromeDriver != null) {
            chromeDriver.manage().deleteAllCookies();
        }
    }

    @Scheduled(cron = "0 0 0 * * *", zone = NEW_YORK_ZONE_NAME)
    public void recreateTwitterLoggersForNewDayScheduledJob() throws IOException {
        FileUtils.deleteDirectory(new File(folderName));
        folderName = createFolderForScreenshots();

        if (chromeDriver != null) {
            chromeDriver.manage().deleteAllCookies();
            chromeDriver.close();
            chromeDriver.quit();
        }
    }

I tried to close and quit webdriver after every screenshot taking, but that doesn't help. How can I prevent memory leaking using chrome node?

0 Answers
Related