Problem
It is too easy to use the overall pool's value of MAXACT as a surrogate for controlling the number of
Jobs. That is, you can forget the distinction between jobs and threads and use MAXACT to control the
activity in a storage pool. But, you are not controlling jobs; you are controlling threads.
It is also too easy to have your existing MAXACT set too low if your existing QBATCH subsystem
suddenly sees lots of new Java threads from new Java applications.
If you make this mistake (and it is easy to do), you'll see several possible symptoms:
v
Mysterious failures in Java. If you set the value of MAXACT really low, certainly as low as one,
sometimes Java won't run, but it also won't always give a graceful message explaining why.
v
Mysterious "hangs" and slowdowns in the system. If you don't set the value pathologically low,
but still too low, the system will function. But it will also dutifully "kick out" threads to a limbo
known as "ineligible" because that's what MAXACT tells it to do. When MAXACT is too low, the
result is useless wait states and a lot of system churn. In severe cases, it may be impossible to
"load up" a CPU to a high utilization and/or response times will substantially increase.
v
Note carefully that this can happen as a result of an upgrade. If you have just purchased a new
machine and it runs slower instead of faster, it may be because you're using "yesterday's" limits for
MAXACT
If you're having threads thrown into "ineligible", this will be visible via the WRKSYSSTS command.
Simply bring it up, perhaps press PF11 a few times, and see if the Act->Inel is something other than zero.
Note that other transitions, especially Act->Wait, are normal.
Solution
Make sure the
storage pool's
MAXACT is set high enough for each individual storage pool. A
MAXACT of *NOMAX will sometimes work quite well, especially if you use MAXJOBS to control the
amount of working coming into each subsystem.
Use CHGSHRPOOL to change the number of
threads
that can be active in the pool (note that multiple
subsystems can share a pool):
CHGSHRPOOL ACTLVL(newmax)
Use MAXJOB in the subsystem to control the amount of outstanding work in terms of
jobs
:
CHGSBSD QBATCH MAXJOBS(newmax)
Use the Job Queue Entry in the subsystem to have even finer control of the number of jobs:
CHGJOBQE SBSD(QBATCH) JOBQ(QBATCH) MAXACT(newqueue job maximum)
Note in this particular case that MAXACT does refer to jobs and not threads.
IBM i 6.1 Performance Capabilities Reference - January/April/October 2008
©
Copyright IBM Corp. 2008
Chapter 20 - General Tips and Techniques
314