Symptoms:
Client cannot make a new connection.
Client cannot auto-reconnect on failed connection.
Possible causes:
Broker is not running or there is a network connectivity problem.
Too few threads available for the number of connections required.
TCP backlog limits the number of simultaneous new connection requests that can be established.
Operating system limits the number of concurrent connections.
Possible cause: Client applications are not closing connections, causing the number of connections to exceed resource limitations.
To confirm this cause of the problem: List all connections to a broker:
imqcmd list cxn
The output will list all connections and the host from which each connection has been made, revealing an unusual number of open connections for specific clients.
To resolve the problem: Rewrite the offending clients to close unused connections.
Possible cause: Broker is not running or there is a network connectivity problem.
To confirm this cause of the problem:
Telnet to the broker’s primary port (for example, the default of 7676) and verify that the broker responds with Port Mapper output.
Verify that the broker process is running on the host.
To resolve the problem:
Start up the broker.
Fix the network connectivity problem.
Possible cause: Connection service is inactive or paused.
To confirm this cause of the problem: Check the status of all connection services:
imqcmd list svc
If the status of a connection service is shown as unknown or paused, clients will not be able to establish a connection using that service.
To resolve the problem:
If the status of a connection service is shown as unknown , it is missing from the active service list (imq.service.active ). In the case of SSL-based services, the service might also be improperly configured, causing the broker to make the following entry in the broker log:
ERROR [B3009]: Unable to start service ssljms:[B4001]: Unable to open protocol tls for ssljms service...
followed by an explanation of the underlying cause of the exception.
To properly configure SSL services, see Message Encryption.
If the status of a connection service is shown as paused, resume the service (see Pausing and Resuming a Connection Service).
Possible cause: Too few threads available for the number of connections required.
To confirm this cause of the problem: Check for the following entry in the broker log:
WARNING [B3004]: No threads are available to process a new connection on service ...Closing the new connection.
Also check the number of connections on the connection service and the number of threads currently in use, using one of the following formats:
imqcmd query svc -n serviceNameimqcmd metrics svc -n serviceName -m cxn
Each connection requires two threads: one for incoming messages and one for outgoing messages (see Thread Pool Management).
To resolve the problem:
If you are using a dedicated thread pool model (imq.serviceName.threadpool_model=dedicated), the maximum number of connections is half the maximum number of threads in the thread pool. Therefore, to increase the number of connections, increase the size of the thread pool (imq.serviceName.max_threads) or switch to the shared thread pool model.
If you are using a shared thread pool model (imq.serviceName.threadpool_model=shared), the maximum number of connections is half the product of the connection monitor limit (imq.serviceName.connectionMonitor_limit) and the maximum number of threads (imq.serviceName.max_threads). Therefore, to increase the number of connections, increase the size of the thread pool or increase the connection monitor limit.
Ultimately, the number of supportable connections (or the throughput on connections) will reach input/output limits. In such cases, use a multiple-broker cluster to distribute connections among the broker instances within the cluster.
Possible cause: Too few file descriptors for the number of connections required on the Solaris or Linux platform.
For more information about this issue, see Setting the File Descriptor Limit.
To confirm this cause of the problem: Check for an entry in the broker log similar to the following:
Too many open files
To resolve the problem: Increase the file descriptor limit, as described in the man page for the ulimit command.
Possible cause: TCP backlog limits the number of simultaneous new connection requests that can be established.
The TCP backlog places a limit on the number of simultaneous connection requests that can be stored in the system backlog (imq.portmapper.backlog) before the Port Mapper rejects additional requests. (On the Windows platform there is a hard-coded backlog limit of 5 for Windows desktops and 200 for Windows servers.)
The rejection of requests because of backlog limits is usually a transient phenomenon, due to an unusually high number of simultaneous connection requests.
To confirm this cause of the problem: Examine the broker log. First, check to see whether the broker is accepting some connections during the same time period that it is rejecting others. Next, check for messages that explain rejected connections. If you find such messages, the TCP backlog is probably not the problem, because the broker does not log connection rejections due to the TCP backlog. If some successful connections are logged, and no connection rejections are logged, the TCP backlog is probably the problem.
To resolve the problem:
Program the client to retry the attempted connection after a short interval of time (this normally works because of the transient nature of this problem).
Increase the value of imq.portmapper.backlog.
Check that clients are not closing and then opening connections too often.
Possible cause: Operating system limits the number of concurrent connections.
The Windows operating system license places limits on the number of concurrent remote connections that are supported.
To confirm this cause of the problem: Check that there are plenty of threads available for connections (using imqcmd query svc) and check the terms of your Windows license agreement. If you can make connections from a local client, but not from a remote client, operating system limitations might be the cause of the problem.
To resolve the problem:
Upgrade the Windows license to allow more connections.
Distribute connections among a number of broker instances by setting up a multiple-broker cluster.
Possible cause: Authentication or authorization of the user is failing.
The authentication may be failing for any of the following reasons:
Incorrect password
No entry for user in user repository
User does not have access permission for connection service
To confirm this cause of the problem: Check entries in the broker log for the Forbidden error message. This will indicate an authentication error, but will not indicate the reason for it.
If you are using a file-based user repository, enter the following command:
imqusermgr list -i instanceName -u userName
If the output shows a user, the wrong password was probably submitted. If the output shows the following error, there is no entry for the user in the user repository:
Error [B3048]: User does not exist in the password file
If you are using an LDAP server user repository, use the appropriate tools to check whether there is an entry for the user.
Check the access control file to see whether there are restrictions on access to the connection service.
To resolve the problem:
If the wrong password was used, provide the correct password.
If there is no entry for the user in the user repository, add one (see Adding a User to the Repository).
If the user does not have access permission for the connection service, edit the access control file to grant such permission (see Authorization Rules for Connection Services).
Possible cause: Authentication or authorization of the user is failing.
Authentication may be failing for any of the following reasons:
No entry for user in user repository
Incorrect password
User does not have access permission for connection service
To confirm this cause of the problem
Check entries in the broker log for the error message Forbidden. This will indicate an authentication error, but will not indicate the reason for it.
Check the user repository for an entry for this user:
If you are using a flat-file user repository, enter the command
imqusermgr list -i instanceName -u userName
If the output shows the error
Error [B3048]: User does not exist in the password file
then there is no entry for the user in the user repository:
If you are using an LDAP user repository, use the appropriate tools to check whether there is an entry for the user.
If the output from step 2 does show a user entry, the wrong password was probably provided.
Check the access control file to see whether there are restrictions on access to the connection service.
To resolve the problem
If there is no entry for the user in the user repository, add one (see Adding a User to the Repository).
If the wrong password was used, provide the correct password.
If the user does not have access permission for the connection service, edit the access control file to grant such permission (see Authorization Rules for Connection Services).