IBM Support

BPXM023I java/lang/OutOfMemoryError when trying to start CICS TS region

Question & Answer


Question

Why do I get this BPXM023I Out Of Memory (OOM) error when I try to start my CICS Transaction Server for z/OS (CICS TS) region?

BPXM023I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError"

I do not see any messages indicating that the CICS dynamic storage area (DSA) or extended dynamic storage area (DSA) are short on storage (SOS) .

Answer

The two most frequently seen problems that cause OutOfMemoryError are:

1) Lack of Java Heap space for the work load. Java Heap is held in 64bit storage (above the bar). The MEMLIMIT parameter restricts 64bit storage for CICS. CICS requires 6Gig of 64bit storage for itself. Any other 64bit storage must be added on top of that. This is documented under Estimating, checking, and setting MEMLIMIT in the CICS TS documentation.

Heap is just one part of 64bit storage needed by the JVMs running under CICS. Every Java thread needs about 36Meg of storage. If you run with a Liberty server, that needs even more threads and therefore more storage.

If you run more than one JVM on a CICS region, you have to increase storage for each JVM.

So, make sure that the MEMLIMIT setting gives you plenty of virtual storage above the bar. There is no cost (either in money or CPU cycles) for setting MEMLIMIT arbitrarily high. It's main purpose is to stop a run away task from chewing up huge amounts of 64bit storage it does not need. You could safely set it to 20, 40 or 50Gig or more and not cause a problem.

2) Lack of 24bit MVS storage. This is not an obvious cause of memory problems when JVM uses 64bit storage. But, there are still processes that use storage below the line. One of those processes is TCB creation. For some reason, MVS still needs 256K of contiguous 24bit storage to create a new TCB. That is documented in the z/OS documentation under pthread_create (BPX1PTC, BPX4PTC) — Create a thread.

The Usage notes for T*he thread initialization routine*, Step #9 says:

  "A minimum of 256 KB is required in the high private below the line.
   If this is not available, the pthread_create() terminates
   with a RC=ENOMEM and a RSNcode=0B510292"

Language Environment (LE) has to create a new TCB for every thread. And, both LE and Java need to create threads to run the JVM. If it can not find a contiguous 256k of storage at the time the thread or TCB needs to be created, the rejection percolates back to an OutOfMemoryError from Java.

If you have a dump at the time of the error, use the IPCS command:

VERBX VSMDATA 'NOG,SUMM'

and look at the map of storage at the bottom. See if there is 256K of contiguous storage available below the line. If there is not, check to see what you have defined for CICS' DSALIM parameter in the system initialization table (SIT).

Watch your system for actual use of CICS DSA storage. If you do not need as much as is defined, you can reduce DSALIM to provide more room for MVS high storage below the line. That will make it more likely to have 256K of MVS storage available when a Thread or TCB has to be created.

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSGMGV","label":"CICS Transaction Server"},"Platform":[{"code":"PF035","label":"z\/OS"}],"Component":"Java","Version":"","Line of Business":{"code":"LOB35","label":"Mainframe SW"}}]

Product Synonym

CICS/TS CICSTS CICS TS CICS Transaction Server

Document Information

Modified date:
19 December 2016

UID

dwa1333245