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" }