Using the memory checker thread

InterChange Server Express features a memory checker thread that you can use to regulate how events are processed by the system and thereby regulate the consumption of system memory. This can mitigate the risk of system crashes due to lack of memory.

The memory checker thread periodically measures the amount of memory used by InterChange Server Express and evaluates if it is within an acceptable configured range. If memory usage is not within an acceptable range then the memory checker thread manages system components to reduce the memory usage.

If the memory usage exceeds a lower threshold specified by the lower threshold then the memory checker thread causes the event listener threads of the connector controllers in the system to sleep for a configurable maximum amount of time. The amount of time varies depending on how much the memory usage exceeds the lower threshold, but does not exceed the amount of time specified by the Connector pause time at threshold property. By causing the event listener threads to sleep in this way, the memory checker thread slows down the rate at which events are delivered to InterChange Server Express and reduces the risk of the upper memory threshold being exceeded.

If the memory usage exceeds the upper threshold specified by the Memory lower threshold percent property then the memory checker thread pauses the connectors in the system. When connectors are paused they continue to process business objects that are currently queued, but they do not poll new events. The connectors therefore reduce the number of queued business objects and thereby reduce the amount of memory in use, without using more memory to process new business objects. The connectors remain paused for a minimum amount of time specified by Connector pause time at threshold property. When the interval specified by the Connector pause time at threshold property passes, the memory checker thread examines memory usage again. If the memory usage does not exceed the upper threshold anymore then the memory checker thread starts the connectors again. If the memory usage still exceeds the upper threshold, however, the memory checker thread allows the connectors to remain paused.

The memory checker thread sleeps in between its examination and state management operations for the amount of time specified by the Memory checker sleep time property.

To use the memory checker thread, you must follow the instructions in the following sections:

  1. Setting the CW_MEMORY_MAX parameter
  2. Configuring the memory checker thread properties
  3. Further considerations

Setting the CW_MEMORY_MAX parameter

You must configure the Java parameter CW_MEMORY_MAX in the InterChange Server Express startup script to set the maximum heap memory that InterChange Server Express can use. The memory checker thread takes action based on the values of configurable properties that specify percentages of this maximum heap memory amount.

You should set the CW_MEMORY_MAX parameter to the same value specified for the -mx parameter, which specifies the maximum heap size for InterChange Server Express. By default the CW_MEMORY_MAX parameter is set to same value as the -mx parameter, but if you modify the -mx parameter then you must modify the CW_MEMORY_MAX parameter accordingly.

The following example is from an unmodified start_server.bat startup script for InterChange Server Express on a Windows computer:

REM This is the -mx param value for the InterChange Server Express's memory heap
set CW_MEM_HEAP=512

REM Start the InterChange Server Express
%CWJAVA% -Djava.ext.dirs=%JRE_EXT_DIRS%;"%MQ_LIB%";"%DB2_LIB%" 
-Duser.home="%CROSSWORLDS%" -mx%CW_MEM_HEAP%m -DTEAgent=1200 
-DCW_MEMORY_MAX=%CW_MEM_HEAP% %ORB_PROPERTY% -classpath %JCLASSES% 
ServerWrapper -s%SERVERNAME% %2 %3

The CW_MEM_HEAP variable is set to the value 512, and is used to set the -mx parameter, so 512 megabytes of memory are reserved for the Java heap. The CW_MEMORY_MAX parameter is set to the same value by also using the CW_MEM_HEAP variable. Note that the CW_MEMORY_MAX parameter must be proceeded by -D.

Configuring the memory checker thread properties

You must edit the InterChange Server Express configuration file to set the properties for the memory checker thread. These properties are exposed on the "Misc" tab of the InterChange Server Express configuration interface. For more information on configuring InterChange Server Express, see Configuring miscellaneous properties using System Manager. Do the following in the "Server Memory" pane of the "Misc" tab to configure the memory checker thread:

  1. Set the Memory checker sleep time field to the interval of time for which the memory checker thread should sleep in between each operation. Set the Memory checker sleep time field to the value 0 (the default value) to disable the memory checker thread.
  2. Set the Memory upper threshold percent field to the percentage of the total memory available to InterChange Server Express (specified by the CW_MEMORY_MAX parameter) which, when exceeded, should cause the memory checker thread to pause the connectors so that the connectors do not poll any new events until the memory usage drops beneath the upper threshold again. The default value is 90, meaning that the upper threshold is 90 percent of the total memory specified by the CW_MEMORY_MAX parameter. For example, if the CW_MEMORY_MAX parameter is set to 512 megabytes, then the upper threshold would be approximately 460 megabytes.
  3. Set the Memory lower threshold percent field to the percentage of the total memory available to InterChange Server Express (specified by the CW_MEMORY_MAX parameter) which, when exceeded, should cause the memory checker thread to reduce the speed at which connectors deliver events to InterChange Server Express. The default value is 80, meaning that the lower threshold is 80 percent of the total memory specified by the CW_MEMORY_MAX parameter. For example, if the CW_MEMORY_MAX parameter is set to 512 megabytes, then the lower threshold would be approximately 410 megabytes.
  4. Set the Connector pause time at threshold field to an amount of time (in minutes) that both specifies the maximum time for which the rate at which connectors deliver events to InterChange Server Express is reduced when the lower memory threshold is exceeded, and the minimum of time for which the connectors will remain paused when the upper memory threshold is exceeded. The default value is 5.

Figure 94 shows the "Misc" tab and the "Server Memory" properties used to configure the memory checker thread.

Figure 94. Configuring memory checker thread properties

Further considerations

Consider the following information when using the memory checker thread:

Copyright IBM Corp. 2004, 2005