Skip to main content

Reduce Resources Used by noderunner.exe in SharePoint 2013


One of the most common questions is definitely about the resources used by Search. Using Continuous Crawl and/or many crawl processes and/or frequent crawl schedules and/or big change sets in the content sources, etc. – all makes the resources consumed by Search higher and higher. Besides the most known optimization and scale-out techniques, I get the question very often: how the resources consumed by noderunner.exe can be limited?
The first part of my answer is: Please, do plan your resources in production! Search is often seen as "something" that works "behind the scenes", but it can make some very bad surprises… I'm sure you don't want to see your production farm consuming 99% of the available memory while crawling… So please, plan first. Here's some help for this: Scale search for performance and availability in SharePoint Server 2013.
But you might have some dev or demo environments, for sure, where you cannot have more than one crawlers, running on the App server. It's not recommended in production but absolutely reasonable on a dev farm. But I'm sure you don't want to go to drink a coffee or to have a lunch every time when you run a crawling either… So here are some NOT SUPPORTED and NOT RECOMMENDED tips, for your dev/demo environment ONLY!! Don't do any of them on production, please!!!
  1. The first one is the easier, and "not-that-bad" configuration: you should simply set the Performance Level of Search to Reduced (or PartiallyReduced, if you don't want to be so rigorous): Set-SPEnterpriseSearchService -PerformanceLevel Reduced
  2. Second one is the one that is strictly not supported and not recommended. Please don't tell Microsoft you've heard this from me ;-) And once again: it's for dev/demo environments ONLY!!!
    As you know, several search services run as noderunner.exe on the server(s). They can consume a LOT of memory, but the good news is: you can limit their memory usage! The magic is: go to the folder C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0 and look for a line like this:
    <nodeRunnerSettings memoryLimitMegabytes="0" />
    The zero means "unlimited" here. The only thing to do is to set to the amount of RAM you'd like to set as a limit for each noderunner.exe processes.
NOTE: Be aware, these settings might make your crawling processes slower!!

Comments