Background

SharePoint 2013 has now as designed the architecture of FAST Search. This is one of the important reasons why more and more corporates are now switching to SharePoint 2013 and not to other collaboration platform’s.


It sound perfect to have a SharePoint Server 2013 with fast; but if you’re on a development environment with limited hardware resources, the chance exists that you’re Virtual Machine became too slow or even worst it will not respond anymore and the only way is reboot your server.

I have a SharePoint Farm installed on my laptop and only 2 Service Applications has been configured:

  • Search Service Application
  • Managed Metadata Service Application

Nobody is using or connected to the SharePoint Farm but the RAM has almost reached the Maximum

As you can see “Noderunner.exe” (Microsoft SharePoint Search Component) is itself consuming a lot of memory and the same Process is running multiple times. Noderunner.exe is the new executable of search service on SharePoint 2013. This process can’t turn it off because Search is one of essential service application in SharePoint 2013, and it is integrated in many features.

Find Problem

Let’s kill manually these services and see if my SharePoint site is still answering. Select your process and hit “End Process Tree”. This will kill the Process and all children that are attached to him.

As I’m on my Development machine I’m doing the same operation on all the Processes.

And Strike! Everything related to the Search (Content Search, Web Part …) is broken. I can browse to my Website but can’t execute anything related to the Search Service Application. As you can see this isn’t the best approach to gain performance.

Test

It’s really annoying because the Search Service Application shouldn’t not cause so much damage on our SharePoint Farm.

On SharePoint 2010 I knew we could configure the Search Service Performance Level   with powerhsell.

Powershell Cmdlet:

Get-SPEnterpriseSearchService | Set-SPEnterpriseSearchService –PerformanceLevel “PartlyReduced”

Performance Level Explained:

  • Reduced: Total number of threads = number of processors, Max Threads/host = number of processors
  • PartlyReduced: Total number of threads = 4 times the number of processors , Max Threads/host = 16 times the number of processors
  • Maximum: Total number of threads = 4 times the number of processors , Max Threads/host = 16 times the number of processors (threads are created at HIGH priority)

And in fact on SharePoint 2013 it’s the same scenario. After searching a while I found on TechNet this article: http://technet.microsoft.com/en-us/library/ff608126.aspx who actually confirms my theory.

Open Powershell with a Domain Account who has Farm Administrator Rights and hit Get-SPEnterpriseSearchService and as imagined the PerformanceLevel is set up to Maximum.

To change this to reduced or partly reduced hit Set-SPEnterpriseSearchService -PerformanceLevel Reduced and restart the SharePoint Search if your Virtual machine is still answering. After this manipulation your SharePoint Server will be able to breathe and you can continue to work.

Test: Not tested way

You can also say that you want to have the Maximum Performance Level and refuse to change it to reduced.

There is a Config file for NodeRunner.exe’s configuration file that can limit RAM usage of a single process to specific value in megabytes.

You can find it under :

C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config.

The configuration setting is called memoryLimitMegabytes and the default value is 0 (I guess unlimited). You can hit the value you want, save the file and restart your Search Service.