JCL TIME Parameter
TIME Parameter in JCL is a Keyword parameter which indicates the Processor Time required to execute the job/step in a JCL. This can be used either in JOB or in STEP or in both the places. If it is specified in a JOB, it tells the systems that this job can use the specified amount of Processor time and exceeding this leads to abending of the JOB.
It is an optional parameter and if omitted, a default value is given by the system.
Specifying this parameter on JOB is actually to decrease the processor TIME available to that JOB and it can not be used to increase the time over the default values. To increase the TIME parameter value, it should be used on EXEC instead of JOB.
If it is not specified, the default value will be taken. Generally each class would be assigned with some specific parameters and TIME is one of them. So if nothing is specified, value specified for that class parameter would be taken as default.
Any of the below formats can be used to give it in a JCL.
Mins -> It specifies the Maximum number of Minutes a job can use the processor time.
Valid Values: 0 to 357912 (248.5 days)
Secs -> It specifies the Maximum number of seconds a job can use the processor.
Valid Values: 0 to 59
1440 -> It indicates the job can execute unlimited amount of time. Giving 1440 excludes it from the CPU time limit checking thus gives maximum execution. 1440 exactly means 24 hours.
NOLIMIT->It is same as 1440 where it allows the job to execute unlimited amount of time i.e it can use the processor with out a limit.
MAXIMUM -> Allows the job to run for 357912 minutes(248.5 days)
0 -> If specified on Step, it indicates that the step needs to use the time remaining time from the previous step. It is not recommenced to code at JOB level.
NOLIMIT vs 1440:
Both the parameters are same and allows the JOB to use maximum time limit.
Giving 1440 or NOLIMIT allows any of the JOB’s steps to be in waiting status more than the default time limit.
As stated earlier, TIME parameter can be given at JOB level or Step Level. Override comes into picture when it is given at both the places(JOB & Step).
- STEP Level parameter overrides the JOB level one provided that it should be less than the Time remaining(from the JOB level value )after execution of the previous steps. If it is greater then, remaining time would be taken.
- If JOB level parameter is specified with either NOLIMIT or 1440 then the step level values gets nullified.
- If there is no TIME parameter specified then the default values would be taken.
//JOB700 JOB MSGLEVEL=(1,1),MSGCLASS=X,NOTIFY=UID,TIME=(9,20) ... //STEP1 //STEP2 ..
- In this case the total value allotted for the JOB execution is 9 minutes 20 seconds.
- Default value is of 5 mins.
- STEP1 executed for 4 mins so remaining value is 5 min 20 seconds which is greater than the default value(5 mins)
- so step2 is allowed to use 5 mins(default) of processor time.
//JOB700 JOB MSGLEVEL=(1,1),MSGCLASS=X,NOTIFY=UID,TIME=8 ... //STEP1 ...TIME=6 //STEP2 ...TIME=4 ..
Default value is 5 mins.
In this case as per the JOB time parameter, a maximum of 8 mins processor time can be used by all the JOB steps together.
Here even though the Default processor time is of 5 mins, as there is also STEP level parameter specified, STEP1 can use processor for 6 mins. But Step2 can use only the lesser value from the below two cases.
- Remaining time from the JOB level value(2 mins).
- STEP2 TIme level parameter value(4 mins).
As the remaining time from the JOB level parameter is lesser, STEP2 can use processor for a maximum of 2 mins.
//JOB700 JOB MSGLEVEL=(1,1),MSGCLASS=X,NOTIFY=UID,TIME=8 ... //STEP1 ...TIME=6 //STEP2 ...TIME=0 ..
If the TIME=0 is given, it takes the time remaining from the previous step.
//JOB700 JOB MSGLEVEL=(1,1) ... //STEP1 ...TIME=(,55) //STEP2 ...TIME-0 ...
There is no mention of JOB level parameter, but it is mentioned only on the STEP1. Say STEP1 has used processor for 40 seconds . As TIME=0 is mentioned on STEP2, it can use the remaining time from the previous step which is 15 seconds.
//JOB700 JOB MSGLEVEL=(1,1),CLASS=A,TIME=6 ... //STEP1 ... //STEP2 ... ...
Default Value==> 5 mins
In this case there is no mention of STEP level parameter. Step1 can use processor for a maximum of 5 mins (default Value) but it used only 3 mins and step2 can use the lesser values from the below 2 cases.
- TIME remaining from the total limit(3 mins).
- Default value(5 mins)
So STEP2 is allowed to use processor for 3 mins.
//JOB700 JOB MSGLEVEL=(1,1),TIME=6 ... //STEP1 ...TIME=4 //STEP2 ...TIME=4
Even though each step is allowed to use a maximum processor time of 4 mins, the whole job should complete with 6 mins as the JOB level parameter is set to 6 mins. If step1 completes in 4 mins and step2 in 2 mins then no issues. If step2 takes more than 2 mins the job fails at that step with S3222.
S3222 ==> IF the job takes more time than the specified value, system throws this error.
Resolution ==> Increase the time limit or remove the parameter so that it uses the default values. Giving NOLIMIT or MAXIMUM also solves the issue but care should be taken while giving these options.
This can also be resolved by changing the CLASS parameter as well. For example if the given CLASS default value is 10 seconds and JCL executes more than 10 seconds then also it throws this error. In this case change the CLASS value by checking its default values.