Hi

Aoivd ChromeDriver high memory / CPU usage and random hanging

 ChromeDriver high memory / CPU usage and random hanging usually happens because of:

  • Too many Chrome processes/tabs
  • Selenium waiting incorrectly (Thread.Sleep)
  • DevTools/Console open
  • Images/CSS/extensions loading
  • Driver objects not disposed
  • Infinite AJAX/network calls
  • Running non-headless UI rendering
  • Memory leak from repeatedly creating drivers

Your screenshot shows:

  • Chrome paused in debugger
  • DevTools open
  • 7 Chrome processes using ~1.5 GB RAM

That itself can cause freezing.

Best Ways to Reduce ChromeDriver Memory + Avoid Stuck


1. Use Optimized ChromeOptions

var options = new ChromeOptions();

options.AddArgument("--disable-gpu");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-popup-blocking");
options.AddArgument("--disable-notifications");
options.AddArgument("--disable-background-networking");
options.AddArgument("--disable-sync");
options.AddArgument("--disable-translate");
options.AddArgument("--metrics-recording-only");
options.AddArgument("--mute-audio");
options.AddArgument("--no-first-run");
options.AddArgument("--disable-default-apps");
options.AddArgument("--disable-background-timer-throttling");
options.AddArgument("--disable-renderer-backgrounding");
options.AddArgument("--disable-backgrounding-occluded-windows");

options.PageLoadStrategy = PageLoadStrategy.Eager;

2. Disable Images and CSS (Huge Performance Gain)

options.AddUserProfilePreference("profile.managed_default_content_settings.images", 2);
options.AddUserProfilePreference("profile.default_content_setting_values.notifications", 2);

For heavy sites this alone reduces:

  • CPU by 40–60%
  • Memory by 30–50%

3. Use Headless Mode

UI rendering consumes huge RAM.

options.AddArgument("--headless=new");

If automation does not require visible browser, always use headless.


4. NEVER Use Large Thread.Sleep

Bad:

Thread.Sleep(10000);

Use explicit waits:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

wait.Until(d =>
d.FindElement(By.Id("txtUser")).Displayed);

Thread.Sleep causes:

  • freezes
  • stuck UI
  • unnecessary CPU wait

5. Properly Dispose Driver

Very important.

driver.Quit();
driver.Dispose();

Otherwise Chrome processes remain in background.


6. Reuse Single Driver Instead of Creating Many

BAD:

for(int i=0;i<100;i++)
{
new ChromeDriver();
}

GOOD:

ChromeDriver driver = new ChromeDriver(options);

for(int i=0;i<100;i++)
{
// reuse
}

7. Kill Zombie Chrome Processes

Sometimes Selenium crashes leaving Chrome alive.

Before start:

foreach (var process in Process.GetProcessesByName("chrome"))
{
process.Kill();
}

Or only kill chromedriver:

foreach (var process in Process.GetProcessesByName("chromedriver"))
{
process.Kill();
}

8. Reduce Logging

Logging increases memory.

options.SetLoggingPreference(LogType.Browser, LogLevel.Off);

9. Disable Automation Banner

options.AddExcludedArgument("enable-automation");
options.AddAdditionalOption("useAutomationExtension", false);

10. Use Correct ChromeDriver Version

Mismatch between:

  • Chrome version
  • ChromeDriver version

causes:

  • hangs
  • crashes
  • memory spikes

Use matching versions.


11. Avoid Opening DevTools

Your screenshot has DevTools open.

This increases:

  • RAM
  • CPU
  • JS debugging overhead

Avoid:

options.AddArgument("--auto-open-devtools-for-tabs");

12. Set Timeouts Properly

driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

13. Use CDP to Block Unwanted Resources

Very powerful optimization.

driver.ExecuteCdpCommand("Network.enable", new Dictionary<string, object>());

driver.ExecuteCdpCommand("Network.setBlockedURLs",
new Dictionary<string, object>
{
["urls"] = new string[]
{
"*.png",
"*.jpg",
"*.gif",
"*.mp4",
"*.woff"
}
});

Huge improvement for heavy websites.


14. Best Production Setup

var service = ChromeDriverService.CreateDefaultService();

service.HideCommandPromptWindow = true;

var options = new ChromeOptions();

options.AddArgument("--headless=new");
options.AddArgument("--disable-gpu");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-popup-blocking");
options.AddArgument("--blink-settings=imagesEnabled=false");

options.PageLoadStrategy = PageLoadStrategy.Eager;

using (IWebDriver driver = new ChromeDriver(service, options))
{
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);

driver.Navigate().GoToUrl("https://example.com");

WebDriverWait wait =
new WebDriverWait(driver, TimeSpan.FromSeconds(10));

wait.Until(d => d.FindElement(By.TagName("body")));

Console.WriteLine("Loaded");
}

15. If Site Still Freezes

Possible causes:

  • Infinite JS rendering
  • Anti-bot detection
  • Huge DOM tables
  • Memory leak in repeated scraping

Then use:

options.PageLoadStrategy = PageLoadStrategy.None;

And manually wait only for required elements.


Most Important Fixes For Your Case

Based on your screenshot:

  1. Close DevTools
  2. Use headless mode
  3. Disable images
  4. Replace Thread.Sleep
  5. Reuse single driver
  6. Kill zombie chrome processes
  7. Use PageLoadStrategy.Eager
  8. Dispose driver properly

These usually reduce RAM from:

  • 1.5 GB → 250–400 MB

and remove most hanging issues.

Previous
Next Post »