모니터링

X-PUSH Monitoring Server

운영자가 콘솔 및 스크립트를 통하여 X-PUSH의 모니터링 및 관리가 가능한 서비스입니다.

모니터링 서버 사용법

X-PUSH 서버의 동작을 모니터링하기 위한 2가지 방식을 제공하고 있습니다.

console (telnet) 사용법

telnet 접속

명령 프롬프트 (cmd) 에서 telnet X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) 를 입력합니다.

01_telnet_intro

telnet 로그인

$XPUSH_HOME/conf/user.properties 의 id, pw 를 참고하여 로그인합니다.

02_telnet_login

[telnet] show status

01_show_status_client3

[telnet] show clients

06_telnet_show_clients_user3

[telnet] show client [userID]

08_telnet_show_client_userID

[telnet] show client (userID, projectID, topicType, topicId)

09_telnet_show_client_ENTER

[telnet] save clients

15_telnet_save_clients

-> $XPUSH_HOME 에 clientInfo 폴더가 생성되고 폴더 내부에 생성시각이 포함된 이름의 json file 이 생성됩니다.

14_telnet_folder_after

16_telnet_json_file_name

17_telnet_json_file_contents

[telnet] help

20_telnet_help

[telnet] invalid command : 잘못된 명령어 입력 시, 출력되는 문구입니다.

12_telnet_invalid_command

[telnet] no data : 해당하는 조건에 일치하는 검색 결과가 없어서 출력되는 문구입니다.

10_telnet_show_client_noData_full

script (batch, shell) 사용법

$XPUSH_HOME/bin 에서 script 를 실행합니다.

Linux shell script 사용 시, 특수문자가 들어간 인자를 넣을 경우,

스크립트가 정상 동작하지 않을 수 있습니다.

ex) event not found


=> 인자값을 ''(single quotation) 으로 감싸서 입력하면 정상 동작합니다.

[script] show_status

Windows : show_status.bat X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) show_status.bat localhost 50003 tobesoft xpush

Linux : ./show_status.sh X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) ./show_status.sh localhost 50003 tobesoft xpush

id, pw 는 $XPUSH_HOME/conf/user.properties 를 참고합니다.

다음은 실행 예입니다.

02_show_status_result

[script] show_clients

Windows : show_clients.bat X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) show_clients.bat localhost 50003 tobesoft xpush

Linux : ./show_clients.sh X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) ./show_clients.sh localhost 50003 tobesoft xpush

id, pw 는 $XPUSH_HOME/conf/user.properties 를 참고합니다.

다음은 실행 예입니다.

04_show_clients_result

[script] show_client (userID)

Windows : show_client.bat X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw userID

ex) show_client.bat localhost 50003 tobesoft xpush user01

Linux : ./show_client.sh X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw userID

ex) ./show_client.sh localhost 50003 tobesoft xpush user01

id, pw 는 $XPUSH_HOME/conf/user.properties 를 참고합니다.

다음은 실행 예입니다.

06_show_client_result

[script] save_clients

Windows : save_clients.bat X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) save_clients.bat localhost 50003 tobesoft xpush

Linux : ./save_clients.sh X-PUSH 서버 IP 모니터링 포트 (기본 port: 50003) id pw

ex) ./save_clients.sh localhost 50003 tobesoft xpush

id, pw 는 $XPUSH_HOME/conf/user.properties 를 참고합니다.

다음은 실행 예입니다.

08_save_clients_result

-> $XPUSH_HOME 에 clientInfo 폴더가 생성되고 폴더 내부에 생성시각이 포함된 이름의 json file 이 생성됩니다.

10_save_clients_clientInfo_dir,vi

11_save_clients_clientInfo_contents

[script] no data : 해당하는 조건에 일치하는 검색 결과가 없어서 출력되는 문구입니다.

12_show_client_noData

세부 항목 설명 (show_status)

.모듈 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 서버가 정상 동작을 하지 않습니다.