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?