Problema de contagem alta de conexões do WebSphere MQ

Conforme nossa configuração, temos a versão WAS 8.5.5.1, IBM MQ versão 7.5.0.3. Estamos usando 2 canais para conectar ao WMQ, um com MAXINST definido como 250 e outro com 500. SHARECNV está definido como 10 para ambos. Agora, temos um limite superior para fazer no máximo 1600 conexões em um gerenciador de filas, mas acabamos ultrapassando esse limite após 3-4 dias de execução contínua do WAS Server.

Quero entender como os parâmetros do lado do WAS afetam essa contagem. Estamos usando o Queue Connection Factory e Act Spec para fazer as conexões e temos 23 de cada um deles. Destes, para 22, as configurações no Act Spec e no QCF são mantidas padrão, como máximo de sessões do servidor = 10, máximo de conexão no conjunto de conexões = 10, máximo de sessões no conjunto de sessões definido como 10. Esses serviços têm tps bastante baixos de 15 a 20 solicitação por minuto. Todos os 22 usam o mesmo canal para se conectar ao gerenciador de filas com MAXINST definido como 250. 1 recebe uma carga bastante alta com pico de 80 solicitações por segundo (aproximadamente 40 por servidor) para as quais sessões máximas do servidor = 40, conexão máxima no conjunto de conexões = 40, o número máximo de sessões no conjunto de sessões é definido como 10. Os valores de tempo limite da conexão, tempo de recuperação, tempo limite não utilizado e tempo limite antigo são mantidos como padrão para todos.

Com essas configurações, acabamos fazendo cerca de 1200 conexões no canal usado por 22 serviços e cerca de 500 no outro canal após 2-3 dias de execução contínua. Estes se acumulam ao longo de um período de tempo. Agora, quero ajustar essas configurações para não ultrapassar o limite de contagem de conexões e também não ter conexões disponíveis. Então, eu tenho algumas perguntas:

Qual é a melhor opção do ponto de vista do desempenho - reduzindo o número máximo de conexões no conjunto de conexões ou o número máximo de sessões no conjunto de sessões. Quais devem ser os valores ideais para a carga mencionada anteriormente.

Qual deve ser o valor ideal para Tempo limite não utilizado para o pool de conexões e o pool de sessões, definido como 30 minutos por padrão. Se reduzimos para 5 minutos, que implicações isso poderia ter no desempenho da falha ao obter as conexões.

Existe alguma configuração que possa ser feita no lado do WMQ para que as conexões ociosas / não utilizadas sejam fechadas ou isso possa acontecer apenas no lado do cliente.

O valor do parâmetro DISCINT está definido como zero e HBINT como 300. Qual deve ser o valor ideal.

Corri abaixo do comando para visualizar as conexões

echo "DIS CONN(*) TYPE(*) CONNAME CHANNEL OBJNAME OBJTYPE" | mqsc -e -m     QM-p width=1000 | grep -o '^\w\+:\|\w\+[(][^)]\+[)]' | awk -F '[()]' -v OFS="," 'function printValues() { if ("CHANNEL" in p) { print p["CHANNEL"], p["CURSHCNV"], p["CONNAME"],p["CHSTADA"],p["CHSTATI"],p["LSTMSGDA"],p["LSTMSGTI"],p["OBJNAME"],p["OBJTYPE"],p["ASTATE"] } } /^\w+:/ { printValues(); delete p; next } { p[$1] = $2 } END { printValues() }' | grep MYCHANNEL

MYCHANNEL,,10.215.161.65,,,,,,,NONE
MYCHANNEL,,10.215.161.65,,,,,,,SUSPENDED
    MYCHANNEL,,10.215.161.65,,,,,MYQUEUE01,QUEUE,ACTIVE

Vejo muita conexão no estado Nenhum e suspenso, que não possui nenhum OBJNAME ou OBJTYPE associado. Tentei simular o problema no Teste e o mesmo acontece e essas conexões continuam aumentando à medida que atendemos às solicitações. Alguém pode me dizer por que essas conexões estão sendo criadas. Além disso, parece que essas conexões nunca serão usadas pelo aplicativo.

É assim que a conexão é feita e fechada no aplicativo: Temos uma classe de abstrack bean que é estendida por todos os MDBs.

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
public class TrackBeanV2 extends AbstractServiceBean implements MessageListener {//code}

O bean abstrack manipula a criação e o fechamento de conexões da seguinte maneira:

public abstract class AbstractServiceBean {

@Resource(name = "myQCF", type = QueueConnectionFactory.class, shareable = true, description = "Reply Connection Factory")
private ConnectionFactory replyCF; 

@PostConstruct
private void postConstruct() {
        replyConnection = replyCF.createConnection();

    }  catch (JMSException e) {
        throw new RuntimeException("Failed to create JMS Connection");
    }

}
@PreDestroy
private void preDestroy() {
    try {
        replyConnection.close();
    } catch (JMSException e) {
        throw new RuntimeException("Failed to close JMS connection", e);
    }
}

private void sendResponseMessage(String outputMessageText, String jmsMessageID , Destination replyDestination) {
    TextMessage replyMessage = null;
    try {           
        createSession();    
        createProducer();
        replyMessage = createReplyMessage(outputMessageText , jmsMessageID);    
        sendReply(replyMessage, replyDestination);  
        closeProducer();
        closeSession();
    } catch (JMSException exp) {
        handleException(exp);
    }
}
private void createSession() throws JMSException{
    replySession = replyConnection.createSession(true, 0);                  
}`
private void createProducer() throws JMSException{                              
    replyProducer = replySession.createProducer(null);      
}

private void closeSession() throws JMSException {
    if (replySession != null) {
        replySession.close();
    }
}

private void closeProducer() throws JMSException{
    if (replyProducer != null) {            
        replyProducer.close();          
    }
}   
private void sendReply(TextMessage replyMessage, Destination replyDestination) throws JMSException {    
    logMessages(replyMessage.getText(), "RESPONSE MESSAGE");
    replyProducer.send(replyDestination, replyMessage);
}

Eu não adicionei outros métodos da classe que organizam / não organizam e outras coisas.

questionAnswers(3)

yourAnswerToTheQuestion