
SharePoint 2013 search noderunner.exe usa troppa memoria
Per default l'impostazione del processo noderunner.exe di SharePoint 2013 è molto aggressiva:
 
infatti il PerformanceLevel è impostato su Maximum.
Nel caso di un singolo server o di una macchina di sviluppo è possibile ridurre l'impatto del search impostando il PerformanceLevel su Reduced:
 
si può verificare l'impostazione con
 
Per ridurre ulteriormente il consumo di memoria è possibile cambiare il file di configurazione
 
per limitare la memoria utilizzata dal processo. Bisogna cambiare la riga
 
dal valore 0, ovvero memoria illimitata , al valore che si vuole, ad esempio 250. Valori troppo bassi fanno andare in crash il processo con questo messaggio negli eventi
Application: NodeRunner.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
Stack:
at System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
E' consigliabile non modificare questa impostazione su una macchina di produzione.
Ovviamente queste impostazioni possono ridurre i tempi di indicizzazione (crawling) ma lasciano più risorse alla macchina.
Va poi riavviato il servizio SharePoint Search Host Controller per abilitare le modifiche:
 
Su un sistema di sviluppo può tornare utile questo comando per fermare il processi noderunner.exe
 
e questo per farlo ripartire
 
    PowerShell
PS C:\> get-SPEnterpriseSearchService
TypeName         : SharePoint Server Search
Id               : f67b9e43-3192-408e-abb3-fecf2c267fec
ServiceName      : OSearch15
ProcessIdentity  : AD\SPService
ContactEmail     : someone@example.com
Applications     : {}
PerformanceLevel : Maximum
Status           : Online
Nel caso di un singolo server o di una macchina di sviluppo è possibile ridurre l'impatto del search impostando il PerformanceLevel su Reduced:
PowerShell
Set-SPEnterpriseSearchService -PerformanceLevel Reduced
PowerShell
PS C:\> get-SPEnterpriseSearchService
TypeName         : SharePoint Server Search
Id               : f67b9e43-3192-408e-abb3-fecf2c267fec
ServiceName      : OSearch15
ProcessIdentity  : AD\SPService
ContactEmail     : someone@example.com
Applications     : {}
PerformanceLevel : Reduced
Status           : Online
Per ridurre ulteriormente il consumo di memoria è possibile cambiare il file di configurazione
Text
C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config
XML
<nodeRunnerSettings memoryLimitMegabytes="0" />
Application: NodeRunner.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
Stack:
at System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
Ovviamente queste impostazioni possono ridurre i tempi di indicizzazione (crawling) ma lasciano più risorse alla macchina.
Va poi riavviato il servizio SharePoint Search Host Controller per abilitare le modifiche:
PowerShell
Get-Service | ? {$_.displayname -eq "SharePoint Search Host Controller"} | Restart-Service
ci mette un po' a riavviarsi.
Su un sistema di sviluppo può tornare utile questo comando per fermare il processi noderunner.exe
PowerShell
Get-Service | ? {$_.displayname -eq "SharePoint Search Host Controller" } | Stop-Service
Get-Service | ? {$_.displayname -eq "SharePoint Search Host Controller" }
PowerShell
Get-Service | ? {$_.displayname -eq "SharePoint Search Host Controller" } | Start-Service
Get-Service | ? {$_.displayname -eq "SharePoint Search Host Controller" }