Sun Java System Message Queue 3.7 UR1 관리 설명서

사용 불능 메시지 대기열에 메시지가 포함되어 있음

증상:


Listing all the destinations on the broker specified by:
---------------------------------
Host         Primary Port
---------------------------------
localhost    7676
----------------------------------------------------------------------
   Name     Type    State   Producers  Consumers  Msgs
                                         Total    Count  UnAck  Avg Size
------------------------------------------------- ----------------------
MyDest      Queue  RUNNING       0          0        5      0    1177.0
mq.sys.dmq  Queue  RUNNING       0          0       35      0    1422.0
Successfully listed destinations.

이 예의 사용 불능 메시지 대기열 mq.sys.dmq에는 35개의 메시지가 포함되어 있습니다.

가능한 원인:

가능한 원인: 메시지 수 또는 메시지 크기가 대상 제한을 초과합니다.

문제의 원인을 확인하는 방법: QBrowser 데모 응용 프로그램을 사용하여 사용 불능 메시지 대기열의 내용을 살펴봅니다. QBrowser 데모의 플랫폼별 위치는 부록 A, 플랫폼별 Message QueueTM 데이터 위치를 참조하십시오. 또한 "예제 응용 프로그램 및 위치" 표를 참조하십시오.

다음은 Windows 플랫폼에서의 호출 예입니다.

cd \MessageQueue3\demo\applications\qbrowser java QBrowser

QBrowser 기본 창이 나타나면 대기열 이름 mq.sys.dmq를 선택한 다음 Browse를 누릅니다. "메시지 시간 초과 값이 만료됩니다."에서 이전에 표시된 것과 같은 목록이 나타납니다. "메시지 시간 초과 값이 만료됩니다."에 표시된 것처럼 아무 메시지나 두 번 누르면 해당 메시지에 대한 세부 정보가 표시됩니다

다음 메시지 등록 정보 값을 확인합니다.

JMS Headers에서 JMSDestination 값을 검토하여 메시지가 사용 불능 상태인 대상을 확인합니다.

문제를 해결하는 방법: 대상 제한을 늘립니다. 예를 들면 다음과 같습니다.

imqcmd update dst - n MyDest -o maxNumMsgs=1000

가능한 원인: 브로커 클럭과 생성자 클럭이 동기화되어 있지 않습니다.

문제의 원인을 확인하는 방법: QBrowser 응용 프로그램을 사용하여 사용 불능 메시지 대기열에 있는 메시지의 세부 정보를 살펴봅니다. JMS_SUN_DMQ_UNDELIVERED_REASON 값을 확인하여 원인이 EXPIRED인 메시지를 찾습니다.

브로커 파일에서 B2102, B2103, B2104 메시지 중 하나가 있는지 확인합니다. 이러한 모든 메시지는 가능한 클럭 스큐가 감지되었음을 보고합니다.

문제를 해결하는 방법: 시스템 자원 준비에 설명된 대로 시간 동기화 프로그램이 실행 중인지 확인합니다.

가능한 원인: 메시지 시간이 초과되기 전에 사용자가 메시지를 받지 못합니다.

문제의 원인을 확인하는 방법: QBrowser 응용 프로그램을 사용하여 사용 불능 메시지 대기열에 있는 메시지의 세부 정보를 살펴봅니다. JMS_SUN_DMQ_UNDELIVERED_REASON 값을 확인하여 원인이 EXPIRED인 메시지를 찾습니다.

대상에 사용자가 있는지 확인합니다. 예를 들면 다음과 같습니다.

imqcmd query dst -t q -n MyDest

Current Number of Active Consumers에 나열된 값을 확인합니다. 활성 사용자가 있는 경우 다음 중 하나에 해당됩니다.

문제를 해결하는 방법: 응용 프로그램 개발자에게 메시지 수명 값을 늘리도록 요청합니다.

가능한 원인: 사용자 수에 비해 생성자가 너무 많습니다.

문제의 원인을 확인하는 방법: QBrowser 응용 프로그램을 사용하여 사용 불능 메시지 대기열에 있는 메시지의 세부 정보를 살펴봅니다. JMS_SUN_DMQ_UNDELIVERED_REASON의 값을 확인합니다. 이유가 REMOVE_OLDEST 또는 REMOVE_LOW_PRIORITY인 경우 imqcmd query dst 명령을 사용하여 대상의 생성자 수와 사용자 수를 확인합니다. 생성자 수가 사용자 수를 초과하는 경우 생성 속도가 사용 속도보다 훨씬 빠를 수 있습니다.

문제를 해결하는 방법: 다음과 같은 명령을 사용하여 사용자 클라이언트를 추가하거나 사용자 제한 동작을 FLOW_CONTROL(사용 속도를 사용하여 생성 속도 제어)로 설정합니다.

imqcmd update dst -n myDst -t q -o consumerFlowLimit=FLOW_CONTROL

가능한 원인: 생성자가 사용자보다 더 빠릅니다.

문제의 원인을 확인하는 방법:사용자가 느리기 때문에 생성자가 느려지는지 확인하려면 다음과 같은 명령을 사용하여 대상 제한 동작을 FLOW_CONTROL(사용 속도를 사용하여 생성 속도 제어)로 설정합니다.

imqcmd update dst -n myDst -t q -o consumerFlowLimit=FLOW_CONTROL

다음 예와 같은 명령을 실행하여 메트릭을 통해 대상 입력과 출력을 검토합니다.

imqcmd metrics dst - n myDst -t q -m rts

메트릭 출력에서 다음 값을 검토합니다.

흐름 제어는 생성을 소비에 맞추므로 생성이 느려지거나 중단되었는지 확인합니다. 그럴 경우 생성자와 사용자의 처리 속도가 일치하지 않는 것입니다. imqcmd list dst 명령을 사용하여 전송되었지만 확인되지 않은(UnAcked) 메시지 수를 확인할 수도 있습니다. 확인되지 않은 메시지 수가 대상 크기보다 작은 경우 대상에 추가 용량이 있기 때문에 클라이언트 흐름 제어에 의해 대상이 다시 보관됩니다.

문제를 해결하는 방법: 생성 속도가 사용 속도보다 일관되게 더 빠를 경우 흐름 제어를 정기적으로 사용하여 시스템을 정렬된 상태로 유지하십시오. 또한 뒤에 나오는 절들을 참조하여 다음과 같은 가능한 요소 각각을 해결해 보십시오.

가능한 원인: 사용자가 너무 느립니다.

문제의 원인을 확인하는 방법: "생성자가 사용자보다 더 빠릅니다."에서 설명한 대로 메트릭을 사용하여 생성 속도와 사용 속도를 확인합니다.

문제를 해결하는 방법:

가능한 원인: 클라이언트가 메시지를 완결하지 못합니다.

문제의 원인을 확인하는 방법: 응용 프로그램 개발자에게 문의하여 응용 프로그램이 트랜잭션을 사용하는지 여부를 확인합니다. 그럴 경우 다음과 같이 활성 트랜잭션을 나열합니다.

imqcmd list txn

다음은 명령 출력의 예입니다.


----------------------------------------------------------------------
Transaction ID       State    User name  # Msgs/# Acks   Creation time
----------------------------------------------------------------------
6800151593984248832  STARTED  guest           3/2     7/19/04 11:03:08 AM

메시지 수와 확인 수를 확인합니다. 메시지 수가 더 많은 경우 생성자가 개별 메시지를 보내는 중일 수 있지만 트랜잭션을 완결하지 못한 것입니다. 브로커는 완결을 수신할 때까지 해당 트랜잭션에 대한 메시지를 경로 지정 및 전달할 수 없습니다. 확인 수가 더 많은 경우 사용자가 개별 메시지에 대한 확인을 보내는 중일 수 있지만 트랜잭션을 완결하지 못한 것입니다. 브로커는 완결을 수신할 때까지 해당 트랜잭션에 대한 확인을 제거할 수 없습니다.

문제를 해결하는 방법: 코딩 오류를 수정하려면 응용 프로그램 개발자에게 문의하십시오.

가능한 원인: 사용자가 메시지를 확인할 수 없습니다.

문제의 원인을 확인하는 방법: 응용 프로그램 개발자에게 문의하여 응용 프로그램이 시스템 기반 확인을 사용하는지 클라이언트 기반 확인을 사용하는지 확인합니다. 응용 프로그램이 시스템 기반 확인을 사용하는 경우 이 절을 건너뜁니다. 응용 프로그램이 클라이언트 기반 확인을 사용하는 경우(CLIENT_ACKNOWLEDGE) 다음과 같은 명령을 사용하여 먼저 클라이언트에 저장된 메시지 수를 줄입니다.

imqcmd update dst -n myDst -t q -o consumerFlowLimit=1

그런 다음 사용자가 느리기 때문에 브로커가 메시지를 버퍼링하는지 아니면 사용자가 메시지를 빠르게 처리하지만 메시지를 확인하지 않았는지를 확인합니다. 다음 명령을 사용하여 대상을 나열합니다.

imqcmd list dst

사용자 이름과 비밀번호를 입력하면 다음과 같은 메시지가 출력됩니다.


Listing all the destinations on the broker specified by:
---------------------------------
Host         Primary Port
---------------------------------
localhost    7676
----------------------------------------------------------------------
   Name     Type    State   Producers  Consumers  Msgs
                                         Total    Count  UnAck  Avg Size
------------------------------------------------ -----------------------
MyDest      Queue  RUNNING       0          0        5    200    1177.0
mq.sys.dmq  Queue  RUNNING       0          0       35      0    1422.0
Successfully listed destinations.

UnAck 수는 브로커가 보낸 다음 확인을 대기 중인 메시지 수를 나타냅니다. UnAck 수가 높거나 증가하는 경우 브로커가 메시지를 보내고 있는 중이므로 느린 사용자를 기다리지 않습니다. 또한 사용자가 메시지를 확인하지 않고 있음을 알 수 있습니다.

문제를 해결하는 방법:코딩 오류를 수정하려면 응용 프로그램 개발자에게 문의하십시오.

가능한 원인: 영구 사용자가 비활성 상태입니다.

문제의 원인을 확인하는 방법: 다음 명령 형식을 사용하여 주제의 영구 가입자를 확인합니다.

imqcmd list dur -d topicName

문제를 해결하는 방법:

가능한 원인: 예기치 않은 브로커 오류가 발생했습니다.

문제의 원인을 확인하는 방법: "Producers are faster than consumers"에서 설명한 대로 QBrowser를 사용하여 메시지를 확인합니다.JMS_SUN_DMQ_UNDELIVERED_REASON 값이 ERROR이면 브로커 오류가 발생한 것입니다.

문제를 해결하는 방법: