Controlling SharePoint 2013 Search Noderunner Memory Usage


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;

  • Crawl
  • Content Processing
  • Index
  • Analytics
  • 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.

Topology Health States
Topology Health 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;

Healthy Search
Healthy Search

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.

Published by

Phil Harding

SharePoint Consultant, Developer, Father, Husband and Climber.

5 thoughts on “Controlling SharePoint 2013 Search Noderunner Memory Usage

  1. Since there are multiple instances of noderunner.exe going, does this mean that each one can use up to 1GB? Or does it mean that all instances combined must stay below 1GB?

    On my dev environment I currently see 5 instances of noderunner that are using a combined 3GB of memory. That is a bookoo amount of ram!

  2. From my observations, this limit applies to each instance of noderunner.exe. If you want a total of around 1.5GB, you would set the limit to 250 MB. I observed this in task manager.

  3. 250 MB is a bad example because as the OP states, Search will not function this low. But yeah, it is the amount for each instance nonetheless

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.