Memory consumed by SSRS Instance

Microsoft.SQLServer.ReportingServices.Windows.Monitor.Instance.MemoryUsageByInstance (UnitMonitor)

The monitor alerts if the memory usage by the SSRS process is close to the limit defined by WorkingSetMaximum setting.

Knowledge Base article:

Summary

The monitor alerts if the memory usage by the SSRS process is close to the limit defined by WorkingSetMaximum setting.

Causes

Reporting services can consume lots of memory for variety of reasons, some of them are as follows:

Resolutions

The following article provides information about memory configuration for the Reporting Services: -

Configure Available Memory for Report Server Applications

Configure server properties in the Reporting Services: Configure a Report Server (Reporting Services Native Mode)

Overridable Parameters

Name

Description

Default Value

Enabled

Enables or disables the workflow

Yes

Generates Alerts

Defines whether the workflow generates an Alert

Yes

Interval (seconds)

The recurring interval of time in seconds in which to run the workflow.

900

Warning threshold

The monitor will change its state to warning, if the observed value is between warning and critical thresholds.

80

Synchronization Time

The synchronization time specified by using a 24-hour format. May be omitted.

 

Timeout (seconds)

Specifies the time the workflow is allowed to run before being closed and marked as failed.

300

Critical threshold

The monitor will change its state to critical, if the observed value exceeds the critical threshold.

90

Element properties:

TargetMicrosoft.SQLServer.ReportingServices.Windows.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.ReportingServices.Windows.MonitorType.Instance.MemoryUsageByInstance
RemotableTrue
AccessibilityPublic
Alert Message
SSRS: Memory usage is reaching the limit
Memory used by SSRS ({3} GB) has exceeded the threshold.
WorkingSetMaximum: {2} GB
WorkingSetMinimum: {1} GB.
Total memory on the server: {0} GB
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.ReportingServices.Windows.Monitor.Instance.MemoryUsageByInstance" Accessibility="Public" Enabled="true" Target="RsDiscW!Microsoft.SQLServer.ReportingServices.Windows.Instance" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.ReportingServices.Windows.MonitorType.Instance.MemoryUsageByInstance" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.ReportingServices.Windows.Monitor.Instance.MemoryUsageByInstance.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='TotalPhysicalMemoryGB']$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='WorkingSetMinimumGB']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='WorkingSetMaximumGB']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='MemoryUsageGB']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Error" MonitorTypeStateID="Above" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Between" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Below" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ServiceName>$Target/Property[Type="RsDiscW!Microsoft.SQLServer.ReportingServices.Windows.Instance"]/ServiceName$</ServiceName>
<ConfigurationFile>$Target/Property[Type="RsDiscW!Microsoft.SQLServer.ReportingServices.Windows.Instance"]/ConfigurationFile$</ConfigurationFile>
<InstanceVersion>$Target/Property[Type="RsCore!Microsoft.SQLServer.ReportingServices.Core.Instance"]/Version$</InstanceVersion>
<LowerThreshold>80</LowerThreshold>
<UpperThreshold>90</UpperThreshold>
<TimeoutSeconds>300</TimeoutSeconds>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>