Usage Note 49630: Tuning the SAS® Real-Time Decision Manager (SAS® Decision Services Engine Server) thread pool
The SAS Decision Services Engine Server uses two thread pools:
- The Servlet thread pool is managed by the web application server and controls the maximum number of concurrent requests for top-level flows or decision campaigns. In other words, this setting determines the maximum number of external requests that are coming in as events that can be processed at the same time.
In order to change the servlet thread pool setting, edit the configuration of your web application server. For JBoss, the setting is contained in jboss-service.xml under the directory for SASServer7. The default setting that is configured by the SAS® installer is 10. Most environments can safely increase that number significantly.
- The Activity thread pool is managed by the SAS Decision Services Engine Server middle-tier application and controls the total number of concurrent activity and subflow (subdiagram or treatment campaign) calls. Note that the activity thread pool setting is not per instance of a servlet thread. The pool is created when the engine server is started and the threads are subsequently shared among all event calls.
In order to change the activity thread pool, add the following system property in the JVM arguments for SASServer7. (SASServer7 is the web application server that hosts our SAS Decision Services Engine Server application.)
rtdm.activity.execution.thread.pool.maxThreads=NEW-MAX-THREAD-VALUE
You can check the current value for these settings from the Diagnostics.jsp page.
If you increase the servlet thread pool, then consider increasing the activity thread pool setting, as well. The number of activity threads that you need per servlet thread depends on your campaign design. For example, you might have an average of five treatment campaigns that run concurrently during arbitration for each execution of a parent campaign. In this case, you might need more than five times as many activity threads as servlet threads. However, if you do not have concurrent calls to more than one activity or subflow from a parent flow (campaign), then you need approximately the same number of activity threads as servlet threads. In this case, set the number of activity threads slightly higher in order to account for any garbage collection, hanging, exception, or logging delays.
Because each thread requires memory and CPU resources, you need to monitor resource usage after each tuning parameter change. One quick way to tune these settings is to increase the size of the servlet thread pool until you start getting "rejected" exceptions from the activity pool. These exceptions are written in the SAS Decision Services Engine Server logs when there are too many servlet threads for the number of activity threads. At that setting, if you still have CPU available, increase the activity thread pool size until you no longer receive these exceptions. If you do not still have CPU available, then decrease the size of the servlet thread pool slightly.
Note: To set these thread pool values in SAS 9.4, see SAS® 9.4 Web Applications: Tuning for Performance and Scalability, Third Edition.
Operating System and Release Information
SAS System | SAS Real-Time Decision Manager | Microsoft® Windows® for x64 | 5.41 | | | |
64-bit Enabled AIX | 5.41 | | | |
64-bit Enabled Solaris | 5.41 | | | |
HP-UX IPF | 5.41 | | | |
Linux for x64 | 5.41 | | | |
Solaris for x64 | 5.41 | | | |
*
For software releases that are not yet generally available, the Fixed
Release is the software release in which the problem is planned to be
fixed.
Date Modified: | 2014-01-17 11:40:49 |
Date Created: | 2013-04-11 13:33:21 |