If you need to configure the amount of memory available to an instance of SSRS you have to get your hands dirty and edit the RsReportServer.config file. The RsReportServer.config file stores settings that are used by Report Manager, the Report Server Web service, and background processing.

The location of the rsconfile file is generally “\Program Files\Microsoft SQL Server\MSRS1111.MSSQLSERVER\Reporting Services\ReportServer”

Within the RsReportServer.config file, configuration settings that control memory allocation for the report server include WorkingSetMaximum, WorkingSetMinimum, MemorySafetyMargin, and MemoryThreshold. If you were to open the file you will see that the WorkingSetMinimum and WorkingSetMaximum are not present by default. This is because you have to enter them yourself, as if you are hosting multiple applications on the same computer and you determine that the report server is using a disproportionate amount of system resources relative to other applications on the same computer. The values that WorkingSetMinimum and WorkingSetMaximum take are in KB. Once you have made your change save the file. Once you have saved, the service will restart and the changes will take place.

What is odd about this is that the two configs that are present by default in the file,  MemorySafetyMargin and MemoryThreshold, are percentages based on the two that we have added. Whether this means that they are ineffective until we add these two, or whether they specify in percentage the total amount of memory available to the server I don’t know. However, MSDN states that:

MemorySafetyMargin: Specifies a percentage of WorkingSetMaximum that defines the boundary between medium and low pressure scenarios. This value is the percentage of available memory that is reserved for the system and cannot be used for report server operations. The default value is 80. So it seems that these are not active until the other values are entered, which I find a bit strange, unless I am reading the article wrong.

Update 2015: Both Minimum and Maximum working sets have a default value. Maximum is 100% of the total memory on the server, so if you are running Reporting Services on a box with other services, you will want to change this. Minimum is technically 0%, but in actual fact is 60% of the total free memory on the server when the service was started. So if there was 10GB of free space, once SSRS hits 6GB, it will always retain that amount of memory regardless.

Summary

We have reporting services deployed across multiple environments in various configurations. Rarely has memory pressure ever been an issue, however when SSRS shares a server with several other features (as it is in one of our test environments) we can see those suffer from memory pressures as SSRS has taken a considerable amount of memory for itself and has not yet relinquished it. By changing this other features have not suffered from memory pressure. I was quite lucky in that i started rather arbitrarily with the settings above (well, I subtracted what our DB Engine instance required, what our other services required and what the OS required, and anything left over I gave to SSRS) and we have yet to have issues with SSRS memory pressure. I’m sure that for most people it will be a more iterative process.