증상:
클라이언트가 새 연결을 설정할 수 없습니다.
클라이언트가 실패한 연결을 자동으로 다시 연결할 수 없습니다.
가능한 원인:
가능한 원인: 클라이언트 응용 프로그램이 연결을 닫을 수 없어 연결 수가 자원 제한을 초과합니다.
문제의 원인을 확인하는 방법: 브로커에 대한 연결을 모두 나열합니다.
imqcmd list cxn
출력에 모든 연결과 각 연결이 설정된 호스트가 나열되고 특정 클라이언트에 비정상적인 수의 연결이 열려 있는 것으로 표시됩니다.
문제를 해결하는 방법: 문제가 있는 클라이언트를 다시 작성하여 사용되지 않는 연결을 닫습니다.
가능한 원인: 브로커가 실행 중이지 않거나 네트워크 연결에 문제가 있습니다.
문제의 원인을 확인하는 방법:
브로커의 기본 포트(예: 기본값 7676)로 텔넷하고 브로커가 포트 매퍼 출력으로 응답하는지 확인합니다.
브로커 프로세스가 호스트에서 실행 중인지 확인합니다.
문제를 해결하는 방법:
브로커를 시작합니다.
네트워크 연결 문제를 해결합니다.
가능한 원인: 연결 서비스가 비활성 상태이거나 일시 중지되어 있습니다.
문제의 원인을 확인하는 방법: 모든 연결 서비스의 상태를 확인합니다.
imqcmd list svc
연결 서비스 상태가 unknown 또는 paused로 표시되어 있는 경우 클라이언트가 해당 서비스를 사용하여 연결을 설정할 수 없습니다.
문제를 해결하는 방법:
연결 서비스의 상태가 unknown으로 표시되어 있는 경우 해당 연결 서비스가 활성 서비스 목록(imq.service.active)에 없는 것입니다. SSL 기반 서비스의 경우 서비스가 잘못 구성되어 있을 수도 있습니다. 이로 인해 브로커가 브로커 로그에 다음과 같은 항목과
ERROR [B3009]: Unable to start service ssljms: [B4001]: Unable to open protocol tls for ssljms service...
이 예외의 근본 원인에 대한 설명을 포함시키게 됩니다.
SSL 서비스를 올바르게 구성하려면 메시지 암호화를 참조하십시오.
연결 서비스의 상태가 paused로 표시되어 있는 경우 서비스를 다시 시작합니다( 연결 서비스 일시 중지 및 다시 시작 참조).
가능한 원인: 필요한 연결 수에 비해 사용 가능한 스레드 수가 너무 적습니다.
문제의 원인을 확인하는 방법: 브로커 로그에서 다음 항목이 있는지 확인합니다.
WARNING [B3004]: No threads are available to process a new connection on service ... Closing the new connection.
또한 다음 형식 중 하나를 사용하여 연결 서비스의 연결 수와 현재 사용 중인 스레드 수를 확인합니다.
imqcmd query svc -n serviceName imqcmd metrics svc -n serviceName -m cxn
각 연결에는 받는 메시지와 보내는 메시지에 하나씩 두 개의 스레드가 필요합니다( 스레드 풀 관리 참조).
문제를 해결하는 방법:
전용 스레드 풀 모델을 사용하고 있는 경우(imq. serviceName.threadpool_model= dedicated) 최대 연결 수는 스레드 풀의 최대 스레드 수의 반입니다. 따라서 연결 수를 늘리려면 스레드 풀의 크기를 늘리거나(imq. serviceName.max_threads) 공유 스레드 풀 모델로 전환합니다.
공유 스레드 풀 모델을 사용하고 있는 경우(imq. serviceName.threadpool_model=shared) 최대 연결 수는 연결 모니터 제한(imq.serviceName.connectionMonitor_limit )과 최대 스레드 수(imq. serviceName.max_threads)를 곱한 수의 반입니다. 따라서 연결 수를 늘리려면 스레드 풀의 크기를 늘리거나 연결 모니터 제한을 늘립니다.
결국 지원 가능한 연결 수(또는 연결의 처리량)는 입출력 제한에 도달합니다. 그런 경우 다중 브로커 클러스터를 사용하여 클러스터 내의 브로커 인스턴스로 연결을 분산합니다.
가능한 원인: Solaris나 Linux 플랫폼에서 필요한 연결 수에 비해 파일 설명자가 너무 적습니다.
이 문제에 대한 자세한 내용은 파일 설명자 제한 설정을 참조하십시오.
문제의 원인을 확인하는 방법: 브로커 로그에 다음과 유사한 항목이 있는지 확인합니다.
Too many open files
문제를 해결하는 방법: ulimit 설명서 페이지에 설명한 대로 파일 설명자 제한을 늘립니다.
가능한 원인: TCP 백로그가 동시에 설정할 수 있는 새 연결 요청 수를 제한합니다.
TCP 백로그는 포트 매퍼가 추가 요청을 거부하기 전에 시스템 백로그(imq.portmapper.backlog)에 저장할 수 있는 동시 연결 요청 수를 제한합니다(Windows 플랫폼의 경우 하드 코드된 백로그 제한이 있으며 Windows 데스크탑의 경우 5이고 Windows 서버의 경우 200임).
백로그 제한으로 인한 요청 거부는 비정상적으로 많은 동시 연결 요청 수로 인해 발생하는 일시적인 현상입니다.
문제의 원인을 확인하는 방법: 브로커 로그를 검사합니다. 먼저, 브로커가 특정 기간 동안 일부 연결은 수신하고 다른 일부 연결은 거부하는지 여부를 확인합니다. 그런 다음, 거부된 연결을 설명하는 메시지를 확인합니다. 그러한 메시지가 있다면 브로커는 TCP 백로그로 인한 연결 거부를 기록하지 않으므로 TCP 백로그 문제가 아닐 수 있습니다. 일부 성공적인 연결이 기록되어 있고 연결 거부는 기록되어 있지 않은 경우 TCP 백로그에 문제가 있을 수 있습니다.
문제를 해결하는 방법:
클라이언트가 시도했던 연결을 잠시 후에 다시 시도하도록 프로그래밍합니다(이 문제가 본래 임시적이기 때문에 이렇게 하면 대개 제대로 작동됨).
imq.portmapper.backlog 값을 늘립니다.
클라이언트가 너무 자주 연결을 닫은 다음 열고 있지는 않은지 확인합니다.
가능한 원인: 운영 체제가 동시 연결 수를 제한합니다.
Windows 운영 체제 사용권에서는 지원되는 동시 원격 연결 수를 제한합니다.
문제의 원인을 확인하는 방법: 연결에 사용할 수 있는 스레드가 충분한지 확인하고(imqcmd query svc 사용) Windows 사용권 계약 조항을 확인합니다. 로컬 클라이언트에서는 연결할 수 있지만 원격 클라이언트에서는 연결할 수 없는 경우 운영 체제 제한이 문제의 원인일 수 있습니다.
문제를 해결하는 방법:
더 많은 연결을 허용하도록 Windows 사용권을 업그레이드합니다.
다중 브로커 클러스터를 설정하여 연결을 여러 브로커 인스턴스에 분산합니다.
가능한 원인: 사용자의 인증 또는 권한 부여가 실패합니다.
다음과 같은 이유로 인해 인증이 실패할 수 있습니다.
잘못된 비밀번호
사용자 저장소에 사용자 항목 없음
사용자에게 연결 서비스에 대한 액세스 권한이 없음
문제의 원인을 확인하는 방법: 브로커 로그의 항목에 Forbidden 오류 메시지가 있는지 확인합니다. 이 메시지는 인증 오류를 나타낼 뿐 그 원인은 나타내지 않습니다.
파일 기반 사용자 저장소를 사용하는 경우 다음 명령을 입력합니다.
imqusermgr list -i instanceName -u userName
출력에 사용자가 표시되는 경우 잘못된 비밀번호가 제출된 것일 수 있습니다. 출력에 다음과 같은 오류가 표시되는 경우 사용자 저장소에 사용자 항목이 없는 것입니다.
Error [B3048]: User does not exist in the password file
LDAP 서버 사용자 저장소를 사용 중인 경우 적절한 도구를 사용하여 사용자 항목이 있는지 확인합니다.
액세스 제어 등록 정보 파일에 연결 서비스 액세스에 대한 제한이 있는지 확인합니다.
문제를 해결하는 방법:
잘못된 비밀번호가 사용된 경우 올바른 비밀번호를 제공합니다.
사용자 저장소에 사용자 항목이 없는 경우 사용자를 추가합니다( 사용자 저장소 채우기 및 관리 참조).
사용자가 연결 서비스에 대한 액세스 권한이 없는 경우 해당 권한을 허용하도록 액세스 제어 등록 정보 파일을 편집합니다( 연결 서비스에 대한 액세스 제어 참고).