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
monitor_jdbc.properties
monitor_user.properties
monitor_logback.xml
monitor_conf.properties
모니터 서버의 기본 설정
항목 | 설명 |
---|---|
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 을 이용한다
구동
$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
port: monitor_conf.properties의 monitor.httpd.port 참고 (기본 port: 8088)
Monitor server 의 로그인은 monitor_user.properties 설정파일을 참조합니다.
설정
xpush instance
System Property
Health check
Mail
XPush Instance
" + " 버튼을 이용하여 XPush Instance 를 추가 할수 있다.
항목 | 설명 |
---|---|
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 가 추가가 되었으면 모니터 서버로 연결이 가능하다
항목 | 설명 |
---|---|
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 의 상태 |
항목 | 설명 |
---|---|
SMTP Server | SMTP 서버 주소 |
SMTP PORT | SMTP 서버 포트 |
SMTP Password | 보내는 사용자 패스워드 |
USER Mail | 보내는 사용자 메일 |
To Mail | 받는 사용자 메일 |
Status | 메일 사용 상태 |
Summary
통합 Dashboard 화면
개별 XPush Instance 별 화면
통합 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
유저 정보를 조회를 할수 있습니다.
온라인 유저
DB 사용자 정보
DB 모바일 사용자 정보
항목 | 설명 |
---|---|
1 | 조회 조건 값을 입력하지 않을 시 전체 조회 값을 입력시 AND 조건으로 조회 |
2 | 온라인 사용자 정보 - 현재 접속된 사용자 정보를 보여준다. - 선택한 사용자에게 메시지 전송이 가능하다. |
3 | DB 사용자 정보 - DB에 저장된 TOPIC 정보를 보여준다. - TOPIC정보를 생성,변경 가능이 가능하다. - 선택한 TOPIC으로 메시지 전송이 가능하다. |
4 | DB 모바일 사용자 정보 - DB에 저장된 사용자의 Mobile Device의 정보를 보여준다. - Device의 정보를 변경이 가능하다. |
Message Mananger
메시지 기준/사용자기준/모바일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.bat/sh : 현재 서버의 상태를 가져와서 출력
show_trace.bat/sh : 콘솔 로거가 출력하는 내용을 가져와서 출력
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
현재 대기 중인 메시지 수 / 큐 사이즈를 의미합니다.
항목 | 설명 |
---|---|
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)로 메시지의 처리에 소요되는 시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.
항목 | 설명 |
---|---|
# | 활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드 |
Avg | 평균 소요 시간 |
Min | 최소 소요 시간 |
Max | 최대 소요 시간 |
DB Connection Pool
항목 | 설명 |
---|---|
Active | 사용중인 Connection 수 |
Max | 최대 Connection 수 |
Idle | 대기중인 Connection 수 |
Notification Message Queue
항목 | 설명 |
---|---|
in Q | 해당 큐에 쌓여 있는 메시지의 개수입니다. |
Notification Result Update Queue
항목 | 설명 |
---|---|
in Q | 해당 큐에 쌓여 있는 메시지의 개수입니다. |
Apns Notification Message Queue
항목 | 설명 |
---|---|
in Q | 해당 큐에 쌓여 있는 메시지의 개수입니다. |
FCM Notification Message Queue
항목 | 설명 |
---|---|
in Q | 해당 큐에 쌓여 있는 메시지의 개수입니다. |
ApnsNotifier Service
Message Process Time(milisec)
ApnsQueue의 작업 쓰레드와 Apns로 데이터를 전송하는 Provider의 메시지 처리 소요시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.
항목 | 설명 |
---|---|
# | 활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드 |
Avg | 평균 소요 시간 |
Min | 최소 소요 시간 |
Max | 최대 소요 시간 |
FcmNotifier Service
Message Process Time(milisec)
FcmQueue의 작업 쓰레드와 FCM으로 데이터를 전송하는 Provider의 메시지 처리 소요시간과 해당 메시지를 처리하는 작업 쓰레드의 상태를 의미합니다.
항목 | 설명 |
---|---|
# | 활성 작업 쓰레드-코드 레벨 / 활성 작업 쓰레드 |
Avg | 평균 소요 시간 |
Min | 최소 소요 시간 |
Max | 최대 소요 시간 |
Etc Message Queue
항목 | 설명 |
---|---|
in Q | 해당 큐에 쌓여 있는 메시지의 개수입니다. |
JMX
JConsole 접속
윈도우 환경 설정
%JAVA_HOME%\bin\jconsole을 실행합니다.
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 서버가 정상 동작을 하지 않습니다.