Note: this post is intended for use in development environments.
The Noderunner component of SharePoint 2013 Search is a voracious beast and left to its own devices will consume very large amounts of RAM.
Noderunner.exe is a component of SharePoint 2013 Search managed by the SharePoint Search Host Controller Service, and each Noderunner process hosts one of the following Search components;
- Content Processing
- Query Processing
- Search Administration
Along with setting Enterprise Search Performance to Reduced;
Set-SPEnterpriseSearchService -PerformanceLevel Reduced
There are many posts around which describe how to set a limit on Noderunners memory usage, but set the the limit too low and Search stops working either completely or partially.
Noderunner Configuration File
The configuration file for Noderunner can be found at C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config.
For example, if you set the limit too low and go to the Search Administration page in Central Administration, you’ll see SharePoint complaining about the topology states.
Other examples of Search failing include;
- A Search Crawl that never completes
- The Search Crawl log contains large amounts of timeout errors indicating that the ‘item pipeline failed to respond in time’
Since Search is now a ubiquitous part of many SharePoint 2013 functions, this is not a good situation.
But for a development environment, its certainly useful to be able to restrict the memory usage to some extent and I spent some time trying to arrive at a figure which would allow Search to work correctly while still placing an upper cap on the amount of memory Search would consume.
I found that setting the upper RAM usage of the Noderunner process to anything less than 500MB would prevent the Admin components from loading and therefore the topology health states would not show in Search Administration.
Setting the upper RAM usage of the Noderunner process to between 500MB and 1GB, the Admin components would (mostly) load and the topology health states would show in Search Administration, but Search Crawls would consistently fail.
Setting the upper RAM usage of the Noderunner process to anything above 1GB would allow Search to work correctly;
I’ve found that setting the memoryLimitMegabytes element in the Noderunner configuration file to 1024 (MB) seems to work ok most of the time. The only thing I occasionally notice in Search Administration is warning triangles underneath 1 or more of the Search components, after a restart.
In this case, restarting the SharePoint Search Host Controller service seems to fix this.