Skip to main content

What is an ABEND?

ABEND stands for ABnormal END. It occurs when a job, step, or program terminates unexpectedly due to errors, resource issues, or manual intervention. It is z/OS's way of indicating that something went wrong during execution.

Why Do ABENDs Occur?

ABENDs happen when:

  • A program performs illegal operations (e.g., divide by zero, invalid address access).
  • System resources like space, time, or memory are exhausted.
  • Required datasets or programs are missing.
  • An operator cancels a job.
  • Output limits are exceeded.

Types of ABENDs in z/OS

ABENDs are broadly categorized as:

TypeFormatMeaningExample
System ABENDSxxxIssued by z/OS systemS322, S806
User ABENDUxxxxIssued by user-written programsU4038, U0016
  • System ABENDs (Sxxx): These are generated by z/OS when system-level errors occur (e.g., space, time, missing module).
  • User ABENDs (Uxxxx): These are triggered by application logic or user-written condition checks in programs.

Where Do You See ABEND Info?

  • JESMSGLG, JESYSMSG, and SYSPRINT DDs in SDSF or spool
  • ABEND Code appears in job log (e.g., ABEND=S322)
  • Diagnostic dumps like SYSABEND, SYSMDUMP, or CEEDUMP

These ABENDs occur when a dataset cannot be allocated or extended due to space issues on DASD.

SB37 — No Secondary Allocation

  • Meaning: End of the primary extent and no secondary space was defined.
  • Cause: Dataset required more space but had zero secondary quantity.
  • Example:
//DD1  DD DSN=MY.DATA1,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,0)),UNIT=SYSDA,DCB=...

Fix:

  • Define a non-zero secondary quantity in SPACE:
SPACE=(CYL,(5,5))
  • Use RLSE to release unused space.

SE37 — All Space Exhausted

  • Meaning: Primary space and all secondary extents are used up.
  • Cause: Dataset grew beyond available allocation.
  • Example:
//DD1  DD DSN=MY.DATA2,DISP=(NEW,CATLG),
// SPACE=(CYL,(10,5)),UNIT=SYSDA

Fix:

  • Increase primary and/or secondary quantities.
  • Review if multi-volume support is needed.
  • Use larger block size or compress data.

SD37 — No Secondary Extents Defined

  • Meaning: Primary space filled up and no secondary space was allowed or allocated.
  • Cause: Similar to SB37, but more directly related to system allocation errors or dataset reaching volume limits without next volume.

Fix:

  • Add a valid secondary allocation.
  • Use UNIT=SYSDA,VOL=SER=... for multi-volume datasets if required.

Prevention Tips

  • Always define secondary space unless dataset is guaranteed to be small.
  • Use RLSE to optimize space usage:
SPACE=(CYL,(10,5),RLSE)
  • Monitor and manage DASD usage and dataset growth patterns.
  • For large sequential files, consider multi-volume allocation.

These ABENDs occur when a job or job step exceeds its CPU time or wall-clock time limit.

S322 — CPU Time Limit Exceeded

  • Meaning: The step used more CPU time than allowed by the TIME= parameter.
  • Cause:
    • Program entered an infinite or long loop.
    • The TIME= limit was underestimated.
    • Inefficient logic or large data volume caused delay.

Example:

//STEP1 EXEC PGM=MYPROG,TIME=1
  • This sets only 1 minute CPU time. If the program runs longer, it will ABEND with S322.

Fix:

  • Increase TIME= value, e.g.:
TIME=(,5)  ⟶ Allows 5 minutes CPU time
TIME=1440 ⟶ Maximum time (24 hours)
  • Debug logic to avoid loops or optimize processing.
  • For test environments, use:
TIME=1440

Prevention Tips for S322

  • Use TIME=1440 for test jobs only (caution: no auto-timeout).
  • For production jobs:
    • Set realistic TIME= estimates.
    • Monitor CPU usage via SDSF ST panel or job logs.
  • Avoid large TIME= values in looping programs—it may lock CPU.

These ABENDs occur when the job is manually cancelled or exceeds system-defined limits, especially related to output.


S222 — Job Cancelled by Operator

  • Meaning: The job or step was manually cancelled by the system operator.
  • Cause:
    • Operator issued a CANCEL command.
    • Long-running or looping job raised a concern.
    • Job held resources too long or caused contention.
  • Example Scenario:
    • A batch job runs in a loop for 30 minutes; the operator cancels it to free up system resources.
  • Fix:
    • Check job logic for potential infinite loops or waits.
    • Reduce run time or improve performance.
    • Review system logs or contact operations for details.

S722 — SYSOUT Lines Limit Exceeded

  • Meaning: The job produced more printed lines than allowed by the OUTLIM= parameter.
  • Cause:
    • Too much data sent to SYSOUT.
    • OUTLIM= limit was too small.
  • Example:
//SYSOUT   DD SYSOUT=*,OUTLIM=1000
  • If the job tries to print 1,001 lines, it ABENDs with S722.

Fix:

  • Increase OUTLIM= to a higher value:
OUTLIM=5000
  • Review program output logic to avoid unnecessary printing.

Prevention Tips for S722

  • For testing, avoid printing large datasets to SYSOUT.

  • Use OUTLIM=0 to disable the line limit (carefully!).

  • Redirect large outputs to datasets instead of SYSOUT:

    //PRINTDD DD DSN=MY.OUTPUT.FILE,DISP=(NEW,CATLG),...