Investigating lock manager waits

Read this section if a resource name of LMQUEUE has been shown for a task. It means that the suspended task cannot acquire the lock on a resource it has requested, probably because another task has not released it.

A user task cannot explicitly acquire a lock on a resource, but many of the CICS® modules that run on behalf of user tasks do lock resources. If this is a genuine wait, and the system is not just running slowly, this could indicate a CICS system error.

Collecting the evidence

You need to take a system dump, and format it using keywords LM and DS. This formats the storage areas belonging to lock manager domain and dispatcher domain. This section describes the data that you should find there if the resource locks are being managed correctly.

Turn to the lock manager summary information (Figure 12 shows an example of this).

Figure 12. Lock manager summary information
LOCK      LOCK       OWNER       MODE    COUNT   # LOCK     # LOCK    -> QUEUE
NAME      TOKEN                                  REQUESTS   SUSPENDS
----      -----      -----       ----    -----   --------   --------  --------
SMLOCK    03B051D8                                      0          0
DSITLOCK  03B05208                                      4          0
LD_GBLOK  03B05238   03B0AAD0    EXCL                   1          1  03B09378
LD_LBLOK  03B05268                                      0          0
DMLOCKNM  03B05298   03B0B690    EXCL                  35          0
CCSERLCK  03B052C8                                      0          0
==LM: LOCK WAIT QUEUE
LOCK      ADDRESS    -> NEXT     OWNER     MODE  SUSPEND    STATUS
NAME                                             TOKEN
----      -------    -------     -----     ----  -------    ------
LD_GBLOK  03B09378   00000000    03B0B3A0  EXCL  010B0001

Table 8 describes each of the fields in the lock manager summary information.

Table 8. Fields in the lock manager summary information
Field Description
LOCK NAME The name given to the lock by the domain that originally issued the ADD_LOCK command.
LOCK TOKEN The token assigned by the lock manager to uniquely identify the lock.
OWNER A token that uniquely identifies the owner of the lock. It is blank unless a task currently holds the lock, in which case the KE_TAS number of the task is given.
MODE The lock mode. It can be:
Blank
No task currently holds the lock.
EXCL
The lock is exclusive--only one task can hold the lock at any one time. The lock owner is identified in the OWNER field.
SHR
The lock is shared--several tasks can hold the lock. In this case, the OWNER field will be blank.
COUNT Blank unless the lock mode is SHR, when it shows the number of tasks currently holding the shared lock.
# LOCK REQUESTS The cumulative total of the number of times a lock has been requested--that is, the number of times the LOCK request has been issued for the lock.
# LOCK SUSPENDS The cumulative total of the number of tasks that have been suspended when requesting this lock because the lock is held by another task.
-> QUEUE Blank unless tasks are currently suspended, awaiting the lock. If this is the case, this field contains the address of the first such task. Further information about the task is given in the ‘LOCK WAIT QUEUE’ section of the information.
ADDRESS The address of the lock manager LOCK_ELEMENT that represents the suspended task.
-> NEXT The address of the next task in the queue awaiting the lock. If this field is zeros, this is the last task in the queue.
OWNER The KE_TAS number of the task that is currently suspended, awaiting the lock.
MODE The lock mode. It can be:
EXCL
The lock is exclusive--only one task can hold the lock at any one time. The lock requester is identified in the OWNER field.
SHR
The lock is shared--several tasks can hold the lock.
SUSPEND TOKEN The dispatcher suspend token for the suspended task.
STATUS The status of the suspended task. It can be:
Blank
The task is waiting to acquire the lock.
DELETED
The suspended task has been deleted from the queue. This occurs only if the lock is deleted.
PURGED
The task was purged while waiting to acquire the lock.

The first step is to establish which lock the suspended task is waiting on. Obtain the KE_TAS number from the dispatcher domain summary for the suspended task and match this with an OWNER in the ‘LOCK WAIT QUEUE’ section of the lock manager summary information.

In the example, only one task is suspended and waiting to obtain the LD_GBLOK lock. The owner (KE_TAS identifier) of this task is 03B0B3A0.

You then have to find out which task currently holds the lock that the suspended task is waiting on. You can do this by looking at the lock manager summary for that lock--in this case, LD_GBLOK.

If the mode of the lock is SHR (shared), you will not be able to proceed any further and you will have to contact your IBM® Support Center.

If the mode is EXCL (exclusive), the identifier of the task that currently holds the lock is given in the OWNER field. In the example, the task that currently has the lock--LD_GBLOK--is 030B0AAD0. Because the OWNER field is the KE_TAS identifier of the task, you can find out from the dispatcher domain summary the status, dispatcher task number, and TCA address of the task that currently holds the lock.

When you have all this information ready, contact the IBM Support Center and report the problem to them.

ECB "PSTDECB"--DLI code lock, PSB load I/O, or DMB load I/O

If you find that a task is waiting on ECB PSTDECB, it indicates either an error within CICS or IMS™ code, or some hardware fault preventing a PSB or DMB from being loaded.

If you have no evidence of a hardware fault, contact the IBM Support Center and report the problem to them.

Related concepts
Techniques for investigating waits
Related tasks
Formatting system dumps
Dealing with the Support Center
[[ Contents Previous Page | Next Page Index ]]