z/OS message

CEE0813S: Not enough storage for a Language Environment get storage request

CEE0813S means a request to Language Environment for heap storage failed because there wasn't enough free storage to satisfy it. The program asked for storage through a get storage or reallocate call, and the region couldn't supply it.

Other names for this code

Also written as CEE0813, CEE0813S insufficient storage, CEE0PD, CEEGTST insufficient storage, LE insufficient storage.

What it means

Language Environment (LE) manages storage for the programs that run under it. Programs can ask it for heap storage with the callable services CEEGTST (get storage) and CEECZST (change the size of storage already obtained). LE gets that storage from the address space. If there isn't enough free storage to meet the request, the call fails with CEE0813S.

The message says there wasn't enough storage to satisfy a get storage request. No storage is handed out, and the address the program gets back is undefined, so the program must not use it. The symbolic feedback code is CEE0PD.

What happens next depends on how the program called the service. LE callable services take an optional feedback code parameter. A program that passes one gets this condition back in it and can decide what to do. A program that leaves it out has the condition signaled instead, and with no handler LE ends the program as it would for any severe error.

The request can fail for two different reasons. Either the region really is too small for what the program needs, or the request itself is unreasonable, such as a size taken from a bad field.

Common causes

  • The step's REGION is too small for the heap the program builds, for example a program that loads a large table into storage.
  • The size passed to CEEGTST or CEECZST is much bigger than intended because the field holding it was never set or was overwritten.
  • HEAP or STACK runtime options ask for initial or increment sizes that don't fit in the region together.
  • The program gets storage below the 16 MB line, where far less is available, because of a HEAP option or an AMODE 24 setting.
  • The program keeps getting storage in a loop and never frees it, so it eventually runs out.

How to find the problem

  1. Look in the job log or the CEEDUMP for CEE0813S and the routine that made the call. The traceback in the CEEDUMP shows which program called the storage service.
  2. Check the REGION on the EXEC or JOB statement, and any limit your site sets through an installation exit.
  3. Print the runtime options in effect with RPTOPTS(ON) and check HEAP, STACK and ALL31.
  4. Display the size argument passed to the call. A huge or negative-looking value means the size field is the problem, not the region.
  5. If storage use grows over the run, compare heap usage at several points with the RPTSTG(ON) runtime option.

How to fix it

  • Raise REGION for the step, or code REGION=0M if your site allows it.
  • Set the size field correctly before the call, and check that it is within a sensible range.
  • Use storage above the 16 MB line where you can. IBM's advice for this message includes using the storage options that obtain storage above the line.
  • Tune the HEAP and STACK options so their sizes are reasonable for the region.
  • Free storage with CEEFRST when the program no longer needs it.

IBM documentation

IBM documentation: CEE0813S. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

Does CEE0813S always end the program?

No. If the program passed a feedback code to the storage service, it gets the condition back and can carry on. If it didn't, LE signals the condition, and the program ends when nothing handles it.

Is CEE0813S the same as an S878 or S80A abend?

Not exactly. S878 and S80A are system abends from z/OS storage requests. CEE0813S is Language Environment reporting that its own get storage service couldn't get enough storage, though a small region causes both.

Will REGION=0M always fix it?

Only when the region is really the limit. If the size passed to the call is wrong, the request will still fail or will waste the storage it gets.