How to configure Shared Memory Pages and Shared Memory Cushion for a Server (region)



Each Server (region) running under Enterprise Server shows, on its Server > Properties > General tab, settings named Shared Memory Pages and Shared Memory Cushion.  These have default values such as 512 and 32, for example.  But the values might need to be adjusted to be certain the Server has enough shared memory.  When a Server is running under load and the shared memory settings are exceeded, the following error might appear in the console.log:  'CASKC0007W Shared memory storage constrained'.  How should a person decide what values to specify?


The product documentation contains charts to help estimate the amount of shared memory a Server might require, for example as shown on this page:

But in practice Micro Focus end-users usually establish values for the Shared Memory Pages and Shared Memory Cushion heuristically, that is by trial and adjustment, instead of by making precise calculations.

While a particular Server (region) is running, go into Server > Properties > Control > ES Monitor & Control (a. k. a.  ESMAC).  On the ESMAC screen, press the "Server" button at top-left, and view at the Server Information screen.  You can see:

Shared Memory (number of 4k pages) -- this is the amount originally configured on the Server > Properties > General tab

SM Total (in k) – just 4 times the 4k number above

SM Cushion (in k) -- the active value of the cushion in k.  Notice that when configuring, you specify this number in units of 4k pages, but here it is shown in k.

SM Free (in k) -- this is the number to pay attention to -- the amount not currently in use

The number in parenthesis following the SM Free, is the FAQE chain length.  This is freed shared memory and is related to how the system manages the shared memory area.  When a block of shared memory is freed it is chained into the FAQE chain. Memory requests will get satisfied from this chain of blocks.

The heuristic approach to setting shared memory for a Server is to set some initial values, run the region for a while, and check the "SM Free" and the "SM Cushion" in ESMAC to see how much is actually being used.  Add some additional load to the region, and watch the SM Free and the SM Cushion.  Adjust the values on the ES Admin > Server > Properties > General page, re-start the region, and test again.  Continue adjusting the values until the SM Free shows a comfortable value even when the region is under heavy load.

You can allocate generous amounts.  Start by allocating 5120 4k pages.  That's 5120*4*1024 bytes = 20 meg.  By today's standards, 20 meg is a reasonable amount of memory for a process.  For example if the machine has 16 gig of RAM, 20 meg is 0.12% of RAM, that is, twelve hundredths of one percent.  And this memory is not allocated individually for each ES process such as mfcs, casmgr, SEPs, etc, instead this memory is allocated once and shared between ES processes.  You can use relatively high values without a performance impact.  Try 5120 with 10% cushion 512, then monitor the SM Free and the SM Cushion in ESMAC and decide whether the amount can be adjusted up or down.

Comment List
  • Hi,

    What are the troubleshooting steps we can do when we start getting the shared memory constraint error. Because the region goes to not responding after some time and then we recycle the region. how to identify which batch jobs are causing the problem. 


    Shared Memory:

    20,000 pages (4k)

    SM Total:

    80,000 k

    SM Cushion:

    4,089 k

    SM Free:

    74,315 k ( 24 )

    Whenever the share memory free goes below 70,000k shared memory constraint starts coming.

Related Discussions