1. 서버 모니터링 |
JBoss EAP 6의 서버 기본 정보는 platform-mbean 코어 서비스(core-service=platform-mbean)에서 얻을 수 있습니다. 다음과 같은 자원 정보를 제공하고 있습니다.
- OS 정보
- 메모리 정보
- Thread 정보
- 런타임 정보
(1) OS 정보
실행 중인 JBoss EAP 6 서버의 OS 기본 정보를 확인할 수 있습니다. 주요 속성값은 아래와 같습니다.
속성 | 설명 |
name | OS 이름 |
arch | OS 아키텍처 |
version | OS 버전정보 |
available-processors | 사용 가능한 프로세서의 개수 |
system-load-average | 시스템 로드 평균 |
CLI로 다음과 같이 OS 정보를 출력합니다.
[standalone@localhost:9999 /] /core-service=platform-mbean/type=operating-system:read-resource
{
"outcome" => "success",
"result" => {
"name" => "Linux",
"arch" => "amd64",
"version" => "2.6.32-279.el6.x86_64",
"available-processors" => 4,
"system-load-average" => 0.0
}
}
(2) Java 메모리의 정보
실행 중인 JBoss EAP 6 서버의 힙 메모리 영역(heap-memory-usage)과 Non 힙 메모리 영역(non-heap-memory-usage)의 사용 현황을 확인할 수 있습니다. 메모리 정보에 대한 주요 속성값은 아래와 같습니다.
속성 | 설명 |
init | 초기에 할당한 메모리양 |
used | 현재 사용하고 있는 메모리양 |
committed | 현재 사용 가능한 메모리양 |
max | JVM이 할당하는 메모리의 최대값 |
아래와 같이 CLI로 메모리의 사용 현황을 확인할 수 있습니다.
[standalone@localhost:9999 /] /core-service=platform-mbean/type=memory:read-attribute(name=heap-memory-usage)
{
"outcome" => "success",
"result" => {
"init" => 1366294528L
"used" => 106635768L,
"committed" => 1309081600L,
"max" => 1309081600L
}
}
(3) 스레드 정보
실행 중인 JBoss EAP 6 서버의 스레드 정보를 얻을 수 있습니다. 스레드 정보의 주요 속성값은 아래와 같습니다.
속성 | 설명 |
all-thread-ids | 실행 중인 스레드 ID 목록 |
current-thread-user-time | 현재 스레드의 사용자 시간. 단위는 nanoseconds |
current-thread-cpu-time | 현제 스레드의 CPU 시간 |
thread-count | 현재 사용 중인 스레드 개수 |
peak-thread-count | 스레드 개수의 피크 시 값 |
daemon-thread-count | 데몬 스레드의 개수 |
total-started-thread-count | 서버 구동 후 시작된 스레드 합계 |
아래와 같이 CLI로 JBoss가 현재 사용하는 스레드 개수를 확인할 수 있습니다.
[standalone@localhost:9999 /] cd /core-service=platform-mbean/type=threading
[standalone@localhost:9999 type=threading] :read-attribute(name=thread-count)
{
"outcome" -> "success",
"result" => 39
}
[standalone@localhost:9999 /] /core-service=platform-mbean/type=threading:read-resource
{
"outcome" => "success",
"result" => {
"all-thread-ids" => [
102L,
101L,
100L,
99L,
... 생략 ...
3L,
2L
],
"thread-contention-monitoring-supported" => true,
"thread-cpu-time-supported" => true,
"current-thread-cpu-time-supported" => true,
"object-monitor-usage-supported" => true,
"synchronizer-usage-supported" => true,
"thread-contention-monitorring-enabled" => flase,
"thread-cpu-time-enabled" => true,
"thread-count" => 38,
"peak-thread-count" => 81,
"total-started-thread-count" => 95L,
"daemon-thread-count" => 13,
"current-thread-cpu-time" => 0L,
"current-thread-user-time" => 0L
}
}
(4) 런타임 상황
JBoss EAP 6의 기본 정보 및 가동 상태 정보를 수집할 수 있습니다. '/core-service=platform-mbean/type=runtime'에서 확인할 수 있는 것은 Java Runtime 정보와 클래스 패스, 시스템 프로퍼티 등 Java 실행 환경에 대한 정보들입니다.
옵션 | 설명 | CLI 명령 |
name | 호스트 이름 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=name) { "outcome" => "success", "result" => "test" } |
vm-name | Java VM 이름 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=vm-name) { "outcome" => "success", "result" => "Java HotSpot(TM) 64-Bit Server VM" } |
vm-vendor | Java VM 업체 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=vm-vendor) { "outcome" => "success", "result" => "Sun Microsystems Inc." } |
vm-version | Java VM 버전 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=vm-version) { "outcome" => "success", "result" => "20.45-b01" } |
spec-name | 표준 이름 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=spec-name) { "outcome" => "success", "result" => "Java Virtual Machine Specification" } |
spec-vendor | 표준 벤더 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=vm-spec-vendor) { "outcome" => "success", "result" => "Sun Microsystems Inc." } |
spec-version | 표준 버전 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=spec-version) { "outcome" => "success", "result" => "1.0" } |
management-spec-version | Management 표준 버전 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=management-spec-version) { "outcome" => "success", "result" => "1.2" } |
class-path | 클래스 패스 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=class-path) { "outcome" => "success", "result" => "/CLOUD/JBOSS/jboss-eap-6.2/jboss-module.jar" } |
library-path | 라이브러리 패스 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=library-path) { "outcome" => "success", "result" => "/usr/java/jdk1.6.0_45/jre/lib/amd64/server:/usr/java/jdk1.6.0_45/jre/lib/amd64:/usr/java/jdk1.6.0_45jre../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib64:/lib:/usr/lib" } |
boot-class-path | 부트 클래스 패스 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=boot-class-path) { "outcome" => "success", "result" => "/usr/java/jdk1.6.0_45/jre/lib/resources.jar:/usr/java/jdk1.6.0_45/jre/lib/rt.jar:/usr/java/jdk1.6.0_45/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0_45/jre/lib/jsse.jar:/usr/java/jdk1.6.0_45/jre/lib/jce.jar:/usr/java/jdk1.6.0_45/jre/lib/charsets.jar/:/usr/java/jdk1.6.0_45/jre/lib/modules/jdk.boot.jar:/usr/java/jdk1.6.0_45/jre/classes" } |
input-arguments | Java VM Arguments | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=input-arguments) { "outcome" => "success", "result" => [ "-D[Standalone]", "-XX:+UseCompressdOops", "-Xms1303m", "-Xmx1303m", "-XX:MaxPermSize=256m", "-Djava.net.preferIPv4Stack=true", "-Djboss.modules.system.pkgs=org.jboss.byteman", "-Djava.awt.headless=true", "-Dorg.jboss.boot.log.file=/CLOUD/JBOSS/jboss-eap-6.2/standalone/log/server.log", "-Dlogging.configuration=file://CLOUD/JBOSS/jboss-eap-6.2/standalone/configuration/logging.properties" ] } |
system-properties | 시스템 프로퍼티 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=system-properties) { "outcome" => "success", "result" => { "[Standalone]" => "", "catalina.home" => "/CLOUD/JBOSS/jboss-eap-6.2/standalone/tmp", "file.encoding" => "UTF-8", "jboss.bind.address.management" => "0.0.0.0", "jboss.home.dir" => "/CLOUD/JBOSS/jboss-eap-6.2", ... 생략 ... "user.lanaguage" => "ko", "user.name" => "jboss", "user.timezone" => "ROK" } } |
start-time | JBoss 실행 시간 | [standalone@localhost:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=start-time) { "outcome" => "success", "result" => "1386029233021L" } |
(5) 데이터소스
JBoss EAP 6 데이터소스 서브시스템의 연결 풀의 상황을 '/subsystem=datasources/data-source=<데이터소스명>/statistics=pool:read-resource(include-runtime=true, include-defaults=true)' 에서 확인할 수 있습니다.
다음 예제는 CLI로 ExampleDS의 데이터소스 접속 풀의 런타임 정보를 얻는 것입니다.
[standalone@localhost:9999 /] /subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=ture,include-defaults=true)
{
"outcome" => "success",
"result" => {
"ActiveCount" => "0",
"AvailableCount" => "20",
"AverageBlockingTime" => "0",
"AverageCreationTime" => "0",
"CreatedCount" => "0",
"DestroyedCount" => "0",
"InUseCount" => "0",
"MaxCreationTime" => "0",
"MaxUsedCount" => "0",
"MaxWaitCoount" => "0",
"MaxWaitTime => "0",
"TimeOut" => "0",
"TotalBlockingTime" => "0",
"TotalCreationTime" => "0"
}
}
데이터소스 정보의 주요 속성값은 아래와 같습니다.
속성 | 설명 |
ActiveCount | 현재 사용 중인 연결 개수 |
AvailableCount | 사용 가능한 연결 개수 |
AverageBlockingTime | 연결을 위해서 대기했던 평균 시간(ms) |
AverageCreationTime | 데이터베이스와 연결에 걸린 평균 시간(ms) |
CreatedCount | 지금까지 만들어진 연결 개수 |
DestroyCount | 지금까지 소멸된 연결 개수 |
MaxCreationTime | 데이터베이스와 연결에 걸린 최대 시간(ms) |
MaxUsedCount | 지금까지 동시에 사용된 최대 연결 수 |
MaxWaitCount | 연결을 얻기 위해 대기한 스레드의 최대값 |
MaxWaitTime | 연결을 얻기 위해 대기한 대기 시간의 최대값 |
TimeOut | 접속을 얻기 위해 기다리다 타임아웃된 스레드의 개수 |
TotalBlockingTime | 연결을 위해 블록킹했던 시간의 총합 |
TotalCreationTime | 연결을 생성하기 위해 걸린 시간의 총합 |
(6) AJP 커넥터
웹 애플리케이션의 동작 상태를 모니터링하기 위해서는 웹 서브시스템의 접속상황 정보를 확인하면 됩니다. 웹 서브시스템은 커넥터를 제공하는데 웹 서버를 통해 요청을 받고 있다면 AJP 커넥터의 정보를 확인하면 됩니다.
'/subsystem=web/connector=ajp:read-resource(include-runtime=true)'에서 실행 중인 JBoss EAP 6 서버의 ajp 커넥터 정보를 얻을 수 있습니다.
http 커넥터를 사용하는 경우 '/subsystem=web/connector=http:read-resource(include-runtime=true)'에서 웹 서브시스템의 http 커넥터 정보를 얻을 수 있습니다.
ajp 커넥터의 주요 속성값은 다음과 같습니다.
속성 | 설명 |
bytesReceived | 커넥터가 수신한 바이트 수 |
bytesSent | 커넥터가 전송한 바이트 수 |
enable-lookups | 서블릿 API에서 DNS를 조회하는지 정보 |
enabled | 커넥터를 사용할 것인지 지정 |
errorCount | 커넥터에서 요청 처리 시 발생한 에러의 개수 |
max-connections | 최대 동시 접속 연결 수 |
max-post-size | 컨테이너가 처리 가능한 POST의 최대 크기(bytes) |
maxTime | 요청 처리에 걸린 최대 시간 |
processingTime | 커넥터의 처리 시간(ms) |
requestCount | 커넥터가 처리한 요청 개수 |
bytesReceived | 커넥터가 받은 메시지의 총 바이트 수 |
bytesSent | 커넥터가 전송한 메시지의 총 바이트 수 |
다음과 같이 CLI로 AJP 커넽거의 런타임 정보를 얻을 수 있습니다.
[standalone@localhost:9999 /] /subsystem=web/connector=http:read-resource(include-runtime=true)
{
"outcome" => "success",
'result" => {
"byyeReceived" => "0",
"byteSent" => "0",
"configuration" => undefined,
"enable-lookups" => false,
"enabled" => true,
"errorCount" => "0",
"executor" => undefined,
"max-connections" => undefined,
"max-post-size" => 2097152,
"max-save-post-size" => 4096,
"maxTime" => "0",
"name" => "http",
"processingTime" => "0",
"protocol" => "HTTP/1.1",
"proxy-name" => undefined,
"proxy-port" => undefined",
"redirect-port" => 443.
"requestCount" => "0",
"scheme" => "http",
"secure" => false,
"Socket-binding" => "http",
"ssl" => undefined,
"virtual-server" => undefined
}
}
(7) EJB
EJB3 서브시스템에서 EJB 실행 시 사용되는 스레드 풀에 대한 정보를 얻을 수 있습니다. 또, EJB의 모니터링 항목으로는 빈 인스턴스 풀의 런타임 정보도 중요합니다. 이 정보는 배포된 EJB에서 수집할 수 있습니다.
EJB3의 스레드 풀 정보는 '/subsystem=ejb3/thread-pool=default:read-resource(include-runtime=true)'에서 확인할 수 있습니다. EJB3 스레드 풀의 주요 속성값은 다음과 같습니다.
속성 | 설명 |
active-count | 실행 중인 스레드 수 |
completed-task-count | 실행이 완료한 작업의 수 |
current-thread-count | 풀의 현재 스레드 수 |
largest-thread-count | 현재까지 풀에 있었던 스레드의 최대 개수 |
max-threads | 풀의 최대 스레드 수 |
rejected-count | 거부된 작업의 개수 |
task-count | 지금까지 실행된 태스크의 총 개수 |
아래와 같이 CLI로 EJB3의 default 스레드 풀의 런타임 정보를 확인할 수 있습니다.
[standalone@localhost:9999 /] /subsystem=ejb3/thread-pool=default:read-resource(include-runtime=true)
{
"outcome" => "success",
"result" => {
"active-count" => 0,
"completed-task-count" => 0L,
"current-thread-count" => 0,
"keeplive-time" => {
"time" => 100L,
"unit" => "MILLISECONDS"
},
"largest-thread-count" => 0,
"max-threads" => 10,
"name" => "default",
"queue-size" => 0,
"rejected-count" => 0,
"task-count" => 0L,
"thread-factory" => undefined
}
}
(8) 트랜잭션
트랜잭션 서브시스템에서는 트랜잭션의 런타임 정보를 얻을 수 있습니다.
'/subsystem=transactions:read-resource(include-runtime=true)'에서 JBoss EAP 6 서버의 트랜잭션 서브시스템의 트랜잭션 정보를 확인할 수 있습니다. 트랜잭션 정보의 주요 속성값은 아래와 같습니다.
속성 | 설명 |
default-timeout | 기본 타임아웃값 |
number-of-aborted-transactions | 중지(롤백)된 트랜잭션 수 |
number-of-application-rollbacks | 애플리케이션의 요청에 따라 롤백된 트랜잭션 수 |
number-of-committed-transactions | 완료된 트랜잭션 수 |
number-of-heuristics | 휴리스틱으로 종료한 트랜잭션 수 |
number-of-inflight-transactions | 시작하여 아직 종료되지 않은 트랜잭션 수 |
number-of-nested-transactions |
중첩된(서브) 트랜잭션 수 |
number-of-resource-rollbacks |
자원의 문제로 롤백된 트랜잭션 수 |
number-of-timed-out-transactions |
타임아웃 때문에 롤백된 트랜잭션의 수 |
number-of-transactions |
작성된 트랜잭션의 총 개수(중첩된 트랜잭션 포함) |
다음과 같이 CLI로 트랜잭션의 런타임 정보를 확인할 수 있습니다.
[standalone@localhost:9999 /] /subsystem=transactions:read-resource(include-runtime=true)
{
"outcome" => "success",
"result" => {
"default-time" => 300,
"enable-statistics" => false,
"enable-tsm-status" => false,
"jdbc-action-store-drop-table" => false,
"jdbc-action-store-table-prefix" => false,
"jdbc-communication-store-drop-table" => false,
"jdbc-communication-store-table-prefix" => undefined,
"jdbc-state-store-drop-table" => false,
"jdbc-state-store-table-prefix" => undefined,
"jdbc-store-datasource" => undefined,
"jts" => false,
"node-identifier" => "1",
"number-of-aborted-transactions" => 0L,
"number-of-application-rollbacks" => 0L,
"number-of-committed-transactions" => 0L,
"number-of-heuristics" => 0L,
"number-of-inflight-transactions" => 0L,
"number-of-nested-transactions" => 0L,
"number-of-resource-rollbacks" => 0L,
"number-of-time-out-transactions" => 0L,
"number-of-transactions" => 0L,
"object-store-path" => "tx-object-store",
"object-store-relative-to" => "jboss.server.data.dir",
"path" => "var",
"process-id-socket-max-ports" => 10,
"process-id-uuid" => true,
"recovery-listener" => false,
"relative-to" => "jboss.server.data.dir",
"socket-binding" => "txn-status-manager",
"use-hornetq-store" => false,
"log-store" => {"log.store" => undefined}
}
}
(9) 배포된 애플리케이션 모니터링
애플리케이션의 세션 현황 정보는 '/deployment=<애플리케이션명>.war/subsystem=web:read-resource(include-runtime=true)' 으로 확인할 수 있습니다.
애플리케이션 세션 상태 주요 속성값은 아래와 같습니다.
속성 | 설명 |
active-sessions | 사용 중인 세션 수 |
duplicated-session-ids | 랜덤 소스에 의해 생성된 중복 세션 ID의 개수 |
expired-sessions | 타임아웃에 의해 종료된 세션의 수 |
max-active-sessions | 사용 중인 세션 수의 최대 수 |
rejected-sessions | 작성 가능한 세션 수 상한에 도달했기 때문에 세션 작성을 거절한 횟수 |
session-avg-alive-time | 세션이 유지된 평균 시간, 단위 : 초 |
session-max-alive-time | 세션이 유지된 최대 시간. 단위 : 초 |
sessions-created | 세션 관리자(Manager)가 생성한 세션의 총 개수 |
다음과 같이 CLI로 웹 애플리케이션의 세션 상태 런타임 정보를 확인할 수 있습니다.
[standalone@localhost:9999 deployment] /deployment=Example.war/subsystem=web:read-resource(include-runtime=true)
{
"outcome" => "success",
"result" => {
"active-sessions" => 0,
"contest-root" => /Example",
"expired-sessions" => 0,
"max-active-sessions" => 0,
"rejected-sessions" => 0,
"session-avg-alive-time" => 0,
"session-max-alive-time" => 0,
"sessions-created" => 0,
"virtual-host" -> "default-host",
"servlet" => {"com.test.Example" => undefined}
}
}
EJB3 인스턴스 풀 정보는 '/deployment=<애플리케이션명>.war/ejb3/stateless-session-bean=<EJB명>:read-resource(include-runtime=true)'으로 확인할 수 있습니다.
EJB3 인스턴스 풀의 주요 속성값은 아래와 같습니다.
속성 | 설명 |
pool-available-count | 사용 가능한 인스턴스 풀의 개수 |
pool-create-count | 생성된 인스턴스의 총 개수 |
pool-current-size | 현재 풀의 크기 |
pool-max-size | 풀의 최대 크기 |
pool-remove-count | 풀에서 제거된 인스턴스 개수 |
다음과 같이 CLI로 EJB3의 인스턴스 풀의 런타임 정보를 확인할 수 있습니다.
[standalone@localhost:9999 deployment] /deployment=Example.war/subsystem=ejb3/stateless-session-bean=ExampleStateless:read-resource(include-runtime=true)
{
"outcome" => "success",
"result" => {
"component-class-name" => "ExampleStateless",
"declared-roles" => [],
"invocations" => 0L,
"methods" => {},
"peak-concurrent-invocations" => 0L,
"pool-available-count" => 20,
"pool-create-count" => 0,
"pool-current-size" => 0,
"pool-max-size" => 20,
"pool-name" => "slsb-strict-max-pool",
"pool-remove-count" => 0,
"run-as-role" => undefined,
"security-domain" => "other",
"timers" => [],
"wait-time" => 0L
}
}
참고서적 : 거침없이 배우는 JBoss
'IT 이야기 > JBoss EAP' 카테고리의 다른 글
JBoss EAP 6과 친해지기 23탄 - JBoss EAP 6 튜닝 #1 (0) | 2021.01.18 |
---|---|
JBoss EAP 6과 친해지기 22탄 - JBoss EAP 6 모니터링 #2 (0) | 2021.01.11 |
JBoss EAP 6과 친해지기 21탄 - 애플리케이션 배포 (0) | 2021.01.11 |
JBoss EAP 6과 친해지기 20탄 - JBoss EAP 6 관리 #2 (2) | 2021.01.06 |
JBoss EAP 6과 친해지기 20탄 - JBoss EAP 6 관리 #1 (0) | 2020.12.29 |
댓글