Optimizing the execution unit (XU)

New in 8.10.4 The Decision Server execution unit (XU) can be configured at installation time and also applied to an existing Operational Decision Manager instance. You can avoid deadlocks by adjusting the predetermined length of timeouts, restricting the number of rule instances to evaluate, and limiting the number of rules that can fire.

About this task

The following XU properties can be configured to optimize the runtime behavior.

Table 1. XU configuration properties
Property name Description Default value
asynchronousRulesetParsing For ruleset execution to continue during the parsing of a ruleset update, set the property to true. If you set the property to false, executions of the ruleset in memory are completed but no new executions can be run until the new ruleset is parsed. true
compiledArchivesCacheProperties To change the properties of the compiled archives cache. Use the maxSize parameter to set the maximum number of compiled archives in the cache.
maxSize=10
defaultConnectionManagerProperties To change the settings of the connection pool. For more information, see Rule session tuning.
pool.maxSize=60,
pool.waitTimeout=3000
documentBuilderPoolProperties The XU uses DocumentBuilder instances to convert XOM objects to BOM strings, and the other way around. Use pool.maxSize to set the maximum number of instances in the pool and pool.waitTimeout to set the maximum number of milliseconds before attempts at obtaining an instance from the pool fail.

pool.waitTimeout=-1 is equal to an infinite duration. A 0 value means infinite timeout. Use this value with extreme caution because if the pool is overloaded, it might cause some threads to hang in the system.

pool.waitTimeout=-1
memoryProfilerIncludedPackageNames When the memory profiler estimates the memory size of an object, it includes only the objects from the packages that start with the set strings. The value must be set as a single string.
com.ibm.rules.,java.,
ilog.,
com.ibm.rules.org.objectweb.asm.,
javax.xml.parsers.,
javax.xml.namespace.,
javax.xml.transform.
rulesetCacheProperties To change the properties of the ruleset cache.
ruleset.cache.maintenance.period=300
rulesetUsageMonitorEnabled Activates the XU memory profiler. You can use the profiler to retrieve information about the memory that the XU uses for a ruleset. true
traceAutoFlush To flush the log stream each time a message is written, change the value to true. false
transformerPoolProperties To change the properties of the Transformers pool. Use pool.maxSize to set the maximum number of instances in the pool and pool.waitTimeout to set the maximum number of milliseconds before attempts at obtaining an instance from the pool fail.

pool.waitTimeout=-1 is equal to an infinite duration. A 0 value means infinite timeout. Use this value with extreme caution because if the pool is overloaded, it might cause some threads to hang in the system.

pool.waitTimeout=-1

Procedure

  1. Create a property file xu-configuration.properties.

    The name must be xu-configuration.properties. You can find a sample of this file in GitHub.

  2. Create a configmap with a name that corresponds to the component that you want to modify.
    Tip: It is important to be able to recognize the purpose of a configmap by its name.

    The following example creates a configmap with a name of my-odm-xu-configmap.

    kubectl create configmap my-odm-xu-configmap --from-file xu-configuration.properties
    
  3. Configure the ODM Helm chart with the name of the configmap.
    On the Helm command, specify the parameter decisionServerRuntime.xuConfigRef in the helm install command.
    $ helm install release_name --set decisionServerRuntime.xuConfigRef=my-odm-xu-configmap /path/to/ibm-odm-prod-version.tgz

What to do next

You can modify the XU properties in existing containers. To update the XU configuration configmap in an existing ODM instance:

  1. Edit the configmap by running the following command:
    kubectl edit configmap my-odm-xu-configmap

    If you did not set the decisionServerRuntime.xuConfigRef parameter during the helm install command, a default configmap is created with the name release_name-odm-ds-runtime-xu-configmap. You can edit this configmap to update the XU configuration.

    Note: You can also update the xu-configuration.properties file and replace the file in the configmap by running the following command:
    kubectl create configmap release_name-odm-ds-runtime-xu-configmap --from-file xu-configuration.properties -o yaml --dry-run | kubectl replace -f -
  2. Delete the decisionserverruntime pod by running the following command:
    kubectl delete pod release_name-odm-decisionserverruntime-XXXX

    A new pod is automatically started with the new XU configuration properties for the Decision Server Runtime.