모니터링

Web Monitoring

운영자가 웹브라우저에서 X-PUSH 모니터링 및 관리가 가능한 서비스입니다.

XPush Instance 정보 및 상태를 모니터링하고, 유저 및 메시지 관리를 통합하는 서버

구성

설정

환경 설정

$xpush-3.0.x/bin/set_xpush.bat 파일을 열어 JAVA_HOME과 XPUSH_HOME을 설정합니다.

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_XX
set XPUSH_HOME=D:\xpush-3.x.x

설정 파일

모니터 서버에서 사용되는 설정파일

$XPUSH_HOME/conf 디렉토리에 안에 포함되어 있습니다.

monitor_conf.properties

모니터 서버의 기본 설정

QUEUE

항목

설명

monitor.agentListen.host

xpush 가 접속할 monitor Server 의 address

192.168.1.1

monitor.agentListen.port

xpush 가 접속할 monitor Server 의 port

8099

monitor.httpd.host

클라이언트가 접속할 monitor Server 의 address

192.168.1.1

monitor.httpd.port

클라이언트가 접속할 monitor Server 의 port

8088

monitor_jdbc.properties

모니터 서버의 Database 설정

항목

설명

spring.datasource.url

접속할 Database 의 URI

spring.datasource.username

Database 접속 할 사용자 ID

spring.datasource.password

Database 접속 할 사용자 Password

spring.datasource.driver-class-name

접속할 JDBC의 Class Name

monitor_user.properties

모니터 서버 접속 유저 설정

항목

설명

user.id

접속할 계정ID

user.password

당 계정의 Password

xpushInstance.id

xpush 서버의 ID

xpushInstance.password

해당 xpush ID 의 Password

monitor_logback.xml

모니터 서버의 로그 설정

모니터 서버의 로그 설정은 logback 을 이용한다

http://logback.qos.ch/manual/configuration.html

구동

$XPUSH_HOME/bin/monitor_startup.sh/monitor_startup.bat 명령어로 구동

기능

login

Monitoring Web Console에 접근

도메인 주소: ip:port/index.html

ex) http://192.168.0.1:8088/index.html

Monitor server 의 로그인은 monitor_user.properties 설정파일을 참조합니다.

설정

XPush Instance

" + " 버튼을 이용하여 XPush Instance 를 추가 할수 있다.

System Property

항목

설명

Server Name

XPUSH Server alias

X-PUSH IP

XPUSH Server IP Address

X-PUSH PORT

XPUSH Server PORT

xpush instance xpush_config.xml 의 SecureShellService PORT

$XPUSH_HOME/conf/xpush_config.xml

<service name="SecureShellService" ...>
    <attribute name="ServerBindAddress">0.0.0.0</attribute>
    <attribute name="Port">50009</attribute>
    ...
</service>

XPush Instance 가 추가가 되었으면 모니터 서버로 연결이 가능하다

System Property

항목

설명

X-PUSH 인스턴스를 모니터 서버에 접속

모니터 서버 연결을 중지

수정

삭제

System Property

항목

설명

Receive interval(second)

xpush instance 로 부터 정보를 받을 간격(단위:초)

ConnectionRetry Count

xpush instance 가 접속 시도하는 횟수

Connection Retry TimeOut(seond)

xpush 서버의 ID

Default row Count

Monitor UI 에서 보여지는 그리드의 row 카운트

Health check

항목

설명

Division

L4, L7 선택

Interval Time(second)

체크할 간격

Status

health check 의 상태

Mail

System Property

항목

설명

SMTP Server

SMTP 서버 주소

SMTP PORT

SMTP 서버 포트

SMTP Password

보내는 사용자 패스워드

USER Mail

보내는 사용자 메일

To Mail

받는 사용자 메일

Status

메일 사용 상태

Summary

통합 Dashboard 화면

항목

설명

1

운영중인 PUSH 서버

2

접속중인 사용자

현재 접속중인 사용자 수와 분포를 보여준다.

총 접속자와 서버 별로 접속된 사용자 수를 보여준다.

3

Health Check

PUSH의 상태를 출력한다.(OK/Fail)

L4 / L7 Layer기준으로 정해진 간격으로 체크한다.

- L4(Transport) : TCP의 접속으로 정상 확인

- L7(Application) : 실제메시지전송여부로 정상 확인

4

System 정보

CPU , Memory, Network(Input/Output)를 라인차트로 보여준다.

5

Queue 상태

Queue에 처리할 메시지 수를 보여준다.

개별 XPush Instance 별 화면

항목

설명

1

XPush Instance 의 시스템 정보를 출력한다.

- OS, JDK, Memory, IP, PORT 등의 정보

2

현재 접속중인 사용자 수를 나타낸다.

3

Health Check

PUSH의 상태를 출력한다.(OK/Fail)

L4 / L7 Layer기준으로 정해진 간격으로 체크한다.

- L4(Transport) : TCP의 접속으로 정상 확인

- L7(Application) : 실제메시지전송여부로 정상 확인

4

System 정보

CPU , Memory, Network(Input/Output)를 라인차트로 보여준다.

5

Queue 상태

Queue에 처리할 메시지 수를 보여준다.

User Mananger

유저 정보를 조회를 할수 있습니다.

항목

설명

1

조회 조건

값을 입력하지 않을 시 전체 조회

값을 입력시 AND 조건으로 조회

2

온라인 사용자 정보

- 현재 접속된 사용자 정보를 보여준다.

- 선택한 사용자에게 메시지 전송이 가능하다.

3

DB 사용자 정보

- DB에 저장된 TOPIC 정보를 보여준다.

- TOPIC정보를 생성,변경 가능이 가능하다.

- 선택한 TOPIC으로 메시지 전송이 가능하다.

4

DB 모바일 사용자 정보

- DB에 저장된 사용자의 Mobile Device의 정보를 보여준다.

- Device의 정보를 변경이 가능하다.

Message Mananger

메시지 기준/사용자기준/모바일Notification 기준으로 조회 가능

  • Message

  • User

  • Notification

Message

메시지 기준으로 조회를 합니다.

항목

설명

1

조회 조건

값을 입력하지 않을 시 전체 조회

값을 입력시 AND 조건으로 조회

2

조건에 대한 메시지 리스트

3

2에서 선택한 Row에 대한 유저 메시지 정보

4

2에서 선택한 Row에 대한 노티피케이션 정보

User

사용자별 메시지 기준으로 조회를 합니다.

항목

설명

1

조회 조건

값을 입력하지 않을 시 전체 조회

값을 입력시 AND 조건으로 조회

2

조건에 대한 사용자 메시지 리스트

3

2에서 선택한 Row에 대한 메시지 정보

4

2에서 선택한 Row에 대한 노티피케이션 정보

Notification

모바일 메시지 기준으로 검색을 합니다.

항목

설명

1

조회 조건

값을 입력하지 않을 시 전체 조회

값을 입력시 AND 조건으로 조회

2

조건에 대한 노티피케이션 리스트

3

2에서 선택한 Row에 대한 메시지 정보

4

2에서 선택한 Row에 대한 사용자 메시지 정보

Send

메시지 전송 기능(Provider)

웹관리콘솔에서 메시지를 직접 전송가능하다

항목

설명

Project ID

전송할 ProjectID

Topic Type

전송할 Topic Type

Topic ID

전송할 Topic ID

Avaiable Period

메시지 유효기간(단위:일)

PUSH, RELI

메시지 종류 선택

PUSH : 일반메시지

RELI : 신뢰성 메시지

Message

전송할 메시지

" + " 버튼을 이용하여 메시지 갯수를 추가 할수 있음

Console Monitoring

X-PUSH는 서버의 동작을 모니터링하기 위한 스크립트를 제공하고 있습니다.

show_status

서버의 상태를 보기 위한 스크립트입니다. $XPUSH_HOME/bin으로 이동후 show_status.bat/sh를 실행합니다. 실행 시 다음 4개의 파라미터가 필요합니다.

파라미터

설명

host

X-PUSH 서버의 IP 주소

port

X-PUSH 서버의 monitor 포트

id

monitor를 위한 인증 계정

password

monitor를 위한 인증 패스워드

show_status.bat localhost 50003 tobesoft xpush
./show_status.sh localhost 50003 tobesoft xpush

다음은 실행 예입니다.

.모듈 Main X-PUSH 서버

RUNTIME

항목

설명

Startup Time

서버가 구동된 시간

Current Time

현재 시간

Status Reset

status가 재설정된 시간

MEMORY

항목

설명

Max

JVM의 최대 사용 가능 메모리

Total Heap

최대 heap 메모리

Used Heap

사용된 heap 메모리

Free Heap

사용되지 않은 heap 메모리

Free Heap 메모리가 0이 되면 메모리 부족으로 X-PUSH 서버가 정상 동작하지 않습니다.

QUEUE

큐 관련 값은 큐의 상태를 0.1초 간격으로 수집된 통계치입니다. 모두 10,000개의 상태를 저장하고 있으며, 결과적으로 최근 1,000초, 약 16분에 해당하는 통계치를 제공합니다.

항목

설명

Message Size in Queue

현재 X-PUSH의 메인큐에 처리 대기 중인 메시지의 수

Average Message in Queue

큐에 담기는 메시지의 평균 개수, 이 값이 1보다 큰 값이라면 메시지를 푸시하는데 지체가 발생하고 있는 것입니다.

Waiting Ratio

전체 서버 런타임 중에 메시지가 큐에서 대기하고 있는 시간의 비율입니다.

Message Size in Queue 항목이 0 이상이고 지속적으로 수치가 증가될 경우. X-PUSH의 메시지 발송이 지연되는 상황


메시지 처리보다 공급이 많은 경우

DB 처리가 지연이 되는경우

Client Servant Container

항목

설명

Container Count

servant를 관리하는 container의 수입니다.

Total Client Count

현재 접속된 클라이언트의 수입니다.

Total Push Count

서버 구동 이후 클라이언트에 푸시한 메시지의 총 개수입니다. 각 container가 푸시한 값의 총합입니다.

Average Tps

서버가 전달한 메시지의 초당 개수 평균입니다. 각 container의 tps를 평균한 값입니다.

container 관련 delay와 tps에 관련된 값은 최근 10,000건의 메시지에 대한 통계치입니다. 개별 메시지가 container에 전달되고 처리되면, 각 delay가 수집되고 이에 대한 통계치가 계산됩니다.

container 별 제공되는 항목은 아래와 같습니다.

항목

설명

#client

해당 container가 관리하는 클라이언트의 개수입니다.

#pushed

해당 container가 푸시한 메시지의 총 개수입니다.

#in Q:

해당 container의 큐에 담긴 현재 메시지의 개수입니다.

avg delay

해당 container의 큐에서 메시지가 푸시를 대기한 평균 시간입니다. 단위는 초입니다.

max delay

해당 container의 큐에서 메시지가 푸시를 대기한 시간 중 최댓값입니다. 단위는 초입니다.

push tps

해당 container가 전달한 메시지의 초당 개수입니다. container가 처리한 메시지 수와 시간을 가지고 값을 구합니다. container가 처리한 메시지 개수는 실제로 각 클라이언트에 푸시한 메시지의 수와는 무관합니다. 예를 들어 어떤 메시지는 소수의 클라이언트에게 전달되고, 어떤 메시지는 모든 클라이언트에 전달될 수 있습니다.

#in Q 항목이 0 이상이고 지속적으로 수치가 증가될 경우. X-PUSH의 메시지 발송이 지연되는 상황.


메시지 처리보다 공급이 많은 경우

Socket Push Message Provider

항목

설명

Connected Provider Count

접속된 메시지 공급자의 수입니다.

servant 별

각 메시지 공급자의 IP 주소와 포트, 그리고 접속 계정을 보여주며, 해당 공급자가 공급한 메시지 수를 나타냅니다.

Provider Message Queue

항목

설명

Push Count

X-PUSH 서버 내부의 Queue를 사용하여 푸시된 메시지의 개수입니다.

Repository Service

QUEUE

현재 대기 중인 메시지 수 / 큐 사이즈를 의미합니다.

QUEUE

항목

설명

Provide Message Queue Size

공급된 신뢰성 메시지가 대기 중인 큐

Response Message Queue Size

확인응답 메시지가 대기 중인 큐

Request Message Queue Size

미수신 발송 요청 메시지가 대기 중인 큐

Topic Message Queue Size

토픽 등록 요청 메시지가 대기 중인 큐

#Queue Size 항목이 0 이상이고 지속적으로 수치가 증가될 경우. X-PUSH의 메시지 발송이 지연되는 상황.


DB 처리가 지연이 되는경우


ex) Provide Message Queue Size = 5000 / 20000 인 상태가 지속됨. 혹은 계속 증가.

Message Process Time(milisec)

각각 Queue별(Provide, Response, Request, Topic)로 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

#

활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드

Avg

평균 소요 시간

Min

최소 소요 시간

Max

최대 소요 시간

DB Connection Pool

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

Active

사용중인 Connection 수

Max

최대 Connection 수

Idle

대기중인 Connection 수

Notification Message Queue

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

in Q

해당 큐에 쌓여 있는 메시지의 개수입니다.

Notification Result Update Queue

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

in Q

해당 큐에 쌓여 있는 메시지의 개수입니다.

Apns Notification Message Queue

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

in Q

해당 큐에 쌓여 있는 메시지의 개수입니다.

FCM Notification Message Queue

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

in Q

해당 큐에 쌓여 있는 메시지의 개수입니다.

ApnsNotifier Service

Message Process Time(milisec)

ApnsQueue의 작업 쓰레드와 Apns로 데이터를 전송하는 Provider의 메시지 처리 소요시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

#

활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드

Avg

평균 소요 시간

Min

최소 소요 시간

Max

최대 소요 시간

FcmNotifier Service

Message Process Time(milisec)

FcmQueue의 작업 쓰레드와 FCM으로 데이터를 전송하는 Provider의 메시지 처리 소요시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

#

활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드

Avg

평균 소요 시간

Min

최소 소요 시간

Max

최대 소요 시간

Etc Message Queue

Message Process Time(milisec) Provider, Response, Request, Topic 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태

항목

설명

in Q

해당 큐에 쌓여 있는 메시지의 개수입니다.

JMX

JConsole 접속

윈도우 환경 설정

  1. %JAVA_HOME%\bin\jconsole을 실행합니다.

  1. Remote 탭에서 IP와 포트를 입력 후 "Connect" 버튼을 클릭합니다.

X-PUSH 서버가 리눅스에 설치되어 있을 경우 JMX에 접속이 되지 않습니다.

리눅스와 윈도우 둘 다 X-PUSH는 0.0.0.0으로 바인딩 되어 실행된다. 하지만 윈도우의 경우 자신의 IP로 라우팅 정보가 라우팅 테이블에 등록되어 있어 해당 주소로 접근할 수 있고, 리눅스의 경우에는 라우팅 테이블에 기본으로 등록되지 않기 때문에 해당 주소로 접근할 수 없습니다.

방안 1

xpush_conf.xml 에서 ServerBindAddress 항목을 "0.0.0.0"가 아닌 실제 사용하는 IP를 부여합니다.

<service name="Publisher">
	...
	<attribute name="ServerBindAddress">192.168.0.1</attribute>
	...
</service>
방안 2

/etc/hosts 파일에 IP를 부여합니다.

192.168.0.1 localhost.localdomain localhost
::1 localhost6.localdomain localhost6

항목

X-PUSH MBean

MBean 정보 목록

ObjectName

설명

ConnectionManagerService

X-PUSH:name=ConnectionManagerService

현재 접속 중인 사용자 정보

NodeManagerService

X-PUSH:name=NodeManagerService

X-PUSH Node 정보

PublisherService

X-PUSH:name=PublisherService

Publisher 정보

RepositoryService

X-PUSH:name=RepositoryService

저장소 정보

System

X-PUSH:name=System

시스템 정보

Container

X-PUSH:type=container, name=TobePublishContainerService0

X-PUSH:type=container, name=TobePublishContainerService1

......

Container 정보

Notification

X-PUSH:type=notification, name=ApnsNotifierService

APNS, GCM 정보

Provider

X-PUSH:type=notification, name=GcmNotifierService

Provider 정보

ConnectionManagerService

MBean 정보 목록

설명

ConnectUserCount

접속된 클라이언트 개수

NodeManagerService

MBean 정보 목록

설명

MyInetInfo

X-PUSH Node의 IP, port

AnotherNodeCount

Node의 개수

PublishCount

다른 Node로 Publish 한 count

AnotherNodeList

연결된 Node 정보

PublisherService

MBean 정보 목록

설명

ClientNumber

접속되 클라이언트 개수

PublishAddress

publish IP

ContainerCount

container 개수

PublishPort

publish Port

XpushVersion

X-PUSH 버전

DateStart

X-PUSH 구동된 시간

DateReset

X-PUSH data 리셋 시간

DateCurrent

현재 시간

RepositoryService

MBean 정보 목록

설명

UpdateMsgQueueMaxCapacity

Queue Size (수신확인 메시지 큐)

SelectMsgQueueMaxCapacity

Queue Size (미수신 메시지 큐)

InsertMsgQueueMaxCapacity

Queue Size (신뢰성 메시지 큐)

SelectMsgQueueState

큐의 상태(0:open, 1:block)

UpdateMsgQueueState

큐의 상태(0:open, 1:block)

InsertMsgQueueState

큐의 상태(0:open, 1:block)

DbcpConnectionPoolActiveCount

사용 중인 pool 개수

DbcpConnectionPoolIdleCount

남아 있는 pool 개수

DbcpConnectionPoolMaxCount

pool 최대 개수

SelectMsgQueueSize

현재 큐 안에 있는 메시지 개수 (미수신 메시지 큐)

InsertMsgQueueSize

현재 큐 안에 있는 메시지 개수 (신뢰성 메시지 큐)

UpdateMsgQueueSize

현재 큐 안에 있는 메시지 개수 (수신확인 메시지 큐)

ThreadPoolMax

쓰레드 풀 개수

FailCount

DataBase 처리 실패 개수

FailCountLimit

FailCount의 한계치

TimeRetryDBPeriodMillis

Queue가 Block 되었을 때 DB Check 하는 간격(Milisecond)

System

MBean 정보 목록

설명

CpuIdle

System CPU Idle

CpuSys

System에서 사용 중인 CPU 사용량

CpuUser

User가 사용중인 CPU 사용량

JavaHome

JAVA_HOME 디렉터리

MemoryCommittedHeap

X-PUSH 최대 Heap Size

MemoryFreeHeap

X-PUSH 남은 Heap Size

MemoryMaxHeap

X-PUSH 최대 Heap Size

MemroyUsedHeap

X-PUSH 사용 중인 Heap Size

ProcessCpu

CPU 사용량

ProcessName

프로세스 이름

ProcessPid

프로세스 아이디

ProcessRss

사용되는 실제 메모리양

ProcessSize

X-PUSH process의 크기

SystemMemoryTotal

시스템 메모리 전체 용량

SystemMemoryUsed

시스템 메모리 사용량

SystemMemoryFree

시스템 메모리 여유 용량

SystemNetworkTotalrx

네트워크 전송량(read)

SystemNetworkTotaltx

네트워크 전송량(write)

SystemSwapFree

swap 남은 용량

SystemSwapTotal

swap 전체 용량

SystemSwapUsed

swap 사용량

XpushHome

X-PUSH Home 디렉터리

Container

MBean 정보 목록

설명

AverageDelay

해당 container의 큐에서 메시지가 푸시를 대기한 평균 시간입니다. 단위는 초

CountInQueue

containerQueue에 들어있는 메세지 개수

MaxCapacity

container 의 큐에 담을 수 있는 최대 메세지 개수 입니다

MaxDelay

container의 큐에서 메시지가 푸시를 대기한 시간 중 최댓값입니다. 단위는 초입니다

MaxServantNum

seravnt를 가질 수 있는 최대 개수

PushCount

일반 메시지 전송 개수

PushTps

container가 전달한 메시지의 초당 개수입니다

QueueAverageDelay

평균 지연 시간

PushTps

container가 전달한 메시지의 초당 개수입니다

QueueAverageDelay

평균 지연 시간

QueueCurrentCount

Queue에 있는 메시지 개수

QueueMaxDelay

최대 지연 시간

QueueMaxSize

Queue가 가질수 있는 최대 개수

ReliCount

신뢰성 메시지 전송 개수

ServantNum

접속자 수

ThreadPoolCurrentSize

Thread Pool 의 현재 개수

ThreadPoolSetMaxSize

Thread Pool 의 최대치

ThreadPoolSetMinSize

Thread Pool 의 최소치

Notification

ApnsNotifierService

MBean 정보 목록

설명

FailureCount

전송 실패 개수

KeystorePath

APNS 인증서 위치

Retries

전송 실패시 재전송 시도 횟수

SuccessCount

전송 성공 개수

TotalSendCount

총 전송 개수

GcmNotifierService

MBean 정보 목록

설명

Apikey

인증 key

FailureCount

전송 실패 개수

Retries

전송 실패시 재전송 시도 횟수

SuccessCount

전송 성공 개수

TotalSendCount

총 전송 개수

Provider

MBean 정보 목록

설명

ConnectProviderList

접속된 Provider 정보(IP, port)

Port

Provider port

ProviderAddress

Provider IP

ProviderNumber

접속된 provider 개수

부족 자원 파악

서버운영을 위한 자원이 부족한 경우 show status에 의한 값들을 가지고 부족한 자원을 파악할 수 있습니다.

메모리 자원 부족

Free Heap 메모리가 작을 경우 정상적인 동작이 불가합니다. Free Heap 메모리가 Total Heap 메모리의 10% 미만일 경우 메모리를 증설하고, 메모리 설정을 변경해야 합니다. 메모리 설정은 startup.bat/startup.sh의 –Xms, -Xmx의 값을 수정합니다.

startup.bat
set JAVA_OPTS=-Xms1024m –Xmx1024m –server
startup.sh
JAVA_OPTS=”-Xms1024m –Xmx1024m –server $JAVA_OPTS”

Free Heap 메모리가 0이되면 메모리 부족으로 X-PUSH 서버가 정상동작하지 않습니다.

접속 가능 자원 부족

X-PUSH 서버에 접속할 수 있는 최대 클라이언트의 수는 xpush_config.xml에 설정된 container수와 container 별 servant의 개수에 의해 결정됩니다.

배포 시의 기본값은 20개의 container와 각 container별 50개의 servant입니다. 따라서 모두 1,000개(20 container x 50 servant)의 클라이언트 접속이 가능합니다. Total Client Count의 수가 최대 접속 수에 다다르면 더 이상 클라이언트의 접속이 불가합니다. 이 경우 설정을 변경하여야 합니다.

container 수와 servant 수의 변경은 X-PUSH 서버의 성능에 영향을 끼칠 수 있습니다.

cpu 혹은 network 자원 부족

Waiting Ratio의 값이 30% 이상이라면 전달될 메시지가 즉시 전달되지 못하고 대기하는 경우가 발생한 경우이고, 이는 cpu나 network 자원이 부족한 경우입니다. 이 경우 보통 Average Message in Queue의 값이 크고, Average Tps가 낮은 수치를 보입니다. 외부 모니터링 툴을 사용하여 cpu의 사용량과 network 사용량을 측정하여, 필요한 자원을 증설하여야 합니다.

Database Connection 부족

DB 사용량이 증가가 되면 다른 메시지를 처리할 DB Connection없어 Queue에 메시지가 적제가 됩니다. 이때 DB 의 Max Connection 을 확인후 X-PUSH xpush_conf.xml에 maxActive 에서 수치를 증가해 주시면 됩니다

[show status 증상] 
MODULE : Repository Service
          QUEUE
                    Provide Message Queue Size = 100 / 100
                    Response Message Queue Size = 500 / 20000
                    Request Message Queue Size = 1000 / -1
                    Topic Message Queue Size = 0 / -1
          Message Process Time(milisec)
                    Provide           # : 0 / 0        Avg : 0      Min : 0      Max : 0
                    Response        # : 0 / 0        Avg : 0      Min : 0      Max : 0
                    Request          # : 20 / 20     Avg : 0      Min : 0      Max : 0
                    Topic             # : 0 / 0        Avg : 0      Min : 0      Max : 0

Request 에서 20개의 Connection 을 모두 사용을 하면, 다른 Queue 를 처리 할수 없어 Queue에 메시지가 쌓이는 현상이 발생
<service name="DbcpService">
	...
	<attribute name="maxActive">50</attribute>
	...
</service>

MaxActive 를 모두 사용중이면 X-PUSH 서버가 정상 동작을 하지 않습니다.