The Client daemon stops responding

This section discusses what to do if you think the Client daemon has stopped responding, for example because:

Check that your CICS® Transaction Server is working correctly, for example by looking at the CICS log. Insufficient storage on the CICS region may cause CICS Universal Client to hang.

To test whether CICS Universal Client has stopped responding, issue cicscli -l from the command line. If the call hangs then CICS Universal Client is not responding.

Try to reproduce the problem with tracing turned on. Take a client trace with as many components as possible active. As a minimum you need the API, DRV and CCL tracepoints; add TRN if possible. (Use wrapping trace if you do not want the trace file to get too large.) The summary trace shows whether the client or user application has stopped responding, and gives an indication as to whether the problem is in the client or server.

If you can reproduce the problem, have details of how to reproduce it available for your support organization. If you cannot reproduce the problem, have available details of the circumstances that led up to the hang, for example:
All UNIX® and Linux® systems
Run ps -ef and ipcs -qa on the system, piping the output to a file. This lists the following:
  • Processes on the system
  • All UNIX and Linux IPC queues
  • Amount of data in the queues
  • Owner of the queues
This information is useful because the client uses IPC queues for internal communication.

Check also that your message queues are correctly configured; see Configuring message queues.

AIX® operating system
Use the System Management Interface Tool (SMIT) to take an operating system trace of the failure.

Use the syscalls event set and ipcs related trace options. Format it to show pids, tids, current system calls, and elapsed time options. Consider increasing the buffer file settings.

dbx tool
You can attach the dbx tool to a process that has locked, to find out what the process is doing. (Check that dbx is installed on your system, and that you have authority to connect to a process.) This example shows how to attach dbx to the Client daemon cclclnt. You can adapt the example to find out why a user application has locked.
Important: Attaching dbx to a process sometimes causes the process to lock or terminate. Use it only if you are sure the process has locked.
Type the following command to find out the process id (pid):
ps -ef | grep cclclnt
Information about the process is displayed:
    root 26864 27348   3 11:06:51  pts/2  0:00 grep cclclnt 
bartfast 28266     1   0 11:06:46  pts/0  0:00 cclclnt 
Using the information provided by the ps command, type this to attach dbx to the process:
dbx -a 28266 ./cclclnt
You should now see something like this:
Waiting to attach to process 28266 ...
Successfully attached to cclclnt.
Type 'help' for help.
reading symbolic information ...warning: no source compiled with -g

stopped in _pthread_ksleep at 0xd0139164 ($t2)
0xd0139164 (_pthread_ksleep+0x9c) 80410014        lwz   r2,0x14(r1)
To get a stack back trace of the current thread, issue the where command:
_pthread_ksleep(??, ??, ??, ??, ??) at 0xd0139164
_pthread_event_wait(??) at 0xd01395c0
_cond_wait_local(??, ??, ??) at 0xd0135494
_cond_wait(??, ??, ??) at 0xd0135998
pthread_cond_timedwait(??, ??, ??) at 0xd0136368
OsEventTimedWait() at 0xd00a78b4
.() at 0x100005b8
_pthread_body(??) at 0xd012f358
To list all threads in the cclclnt process, type thread :
 thread  state-k     wchan    state-u    k-tid   mode held scope function
 $t1     wait      0xc0000100 running    21793     k   no   sys                
>$t2     run                  blocked    32425     k   no   sys  _pthread_ksleep 

To make thread 1 the current thread, type thread current 1.

To get a stack back trace of thread 1, type where. The screen looks like this:
.() at 0x1000c784
.() at 0x10000ae0
.() at 0x10000ae0
.() at 0x100003f4

To close dbx, type quit.

Solaris
Run truss against the hung process; see the operating system documentation for relevant parameters. Specify options to follow forked calls, trace arguments to system calls, and show the environment strings to operating system calls.

Ensure that the /etc/system file allows sufficient queue entries; see Configuring message queues. If the value is too low, the client may freeze while waiting for a queue entry to become available.

Solaris system notes:
  1. Whenever you change the /etc/system file, you must restart your system for the changes to take effect.
  2. Changes to your system may not work if your workstation has less than 32MB of memory; the recommended minimum is 64MB.