Network Management
Enabling gcServer mode for selected services in the SolarWinds Platform
How to increase processing times or improve end-to-end response of services by enabling gcServer mode.
First published date
Last published date
Overview
Product section
Resolution
Environment
- All SolarWinds Platform versions
Services:
- SolarWinds Information Service v3
- Module Engine Host (Business Layer) - only if it is not separated to individual processes
Steps
Conditions under which you may want to enable gcServer mode
- Minimum of 16 GB of RAM (for SWIS only), 32 GB and more if also enabled for Module Engine Service. You can expect to see faster processing time.
- Minimum of 8 physical CPU cores. You can expect to see improvement in end-to-end response of services.
How to enable gcServer mode:
- Back up the Config file for the affected service and make sure the backup is placed outside of the Orion directory.
- Stop the affected services.
- Navigate to the Config file for the affected service, for example, the SolarWindsInformationServiceV3 config file is found in: %:\Program Files (x86)\Solarwinds\Orion\Information Service\3.0 and the file name is SolarWinds.InformationService.Service.exe.config.
- BL: Program Files (x86)\SolarWinds\Orion\SolarWinds.BusinessLayerHost.exe.config
- BLx64: Program Files (x86)\SolarWinds\Orion\SolarWinds.BusinessLayerHostx64.exe.config
- Edit the Config file and add the ONLY <gcServer enabled="true"/> and <gcConcurrent enabled="true"/> line in the runtime section below <enforceFIPSPolicy enable..>:
<gcServer enabled="true" />
<gcConcurrent enabled="true" />
- Save the file and restart the services.
Benefits of enabling gcServer mode for given services:
- Same amount of memory is processed, in approximately the same "amount" of CPU time, but concurrently, resulting in:
- much faster completion of each single 2nd generation (full) GC cycle, scaling with the number of available CPU cores.
- much higher end-to-end response time of the service, as the collections are running on high priority dedicated threads.
- Managed memory is separated to concurrently processed segments, scaled by the number of CPU cores.
- Generations 0 and 1 are processed in parallel, without the need to block threads using the other memory segments, which improves end-to-end responsibility of the services even more, and again, scales with number of CPU cores.
Additional information
- Initial memory consumption of the process with gcServer enabled will multiply several times (2-4x can be expected).
- The exact amount is an implementation detail of .NET, and scales up and down with both CPU cores and available RAM.
- The memory is reserved to the specific process but not "lost" – real memory usage and growth remains approximately the same.
- This cannot be prevented or adjusted, as it's needed to manage the memory in separate segments, to gain the aforementioned improvements.
- Runtime settings are only adjustable per-process, before it's started, and cannot be set separately for plugins / instances of the same executable.