6. 트러블 슈팅 가이드
설치 뒤에 자주 만나는 증상과 조치를 모았습니다. 겪고 있는 증상과 가장 가까운 항목을 찾아 보십시오.
증상으로 찾기
| 증상 | 항목 |
|---|---|
WAS 가 기동되지 않고 VerifyError 가 난다 | WAS를 실행하다 오류가 발생합니다 |
| 운영 중 JVM 이 갑자기 죽는다 | WAS를 실행하다 오류가 발생합니다 · JVM Core dump |
| 콘솔의 트랜잭션 화면에서 한글이 깨집니다 | 한글이 깨져서 표시됩니다 |
| 트랜잭션 시각이 실제와 어긋납니다 | 서버 시간 차이 |
| 메소드별 CPU 시간이 0 으로 나옵니다 | 트랜잭션 CPU시간 표시 확인 |
| Apache 정보가 콘솔에 안 보인다 | Apache 웹서버의 서버정보 |
| 컨테이너·OpenShift 에서 기동 오류가 난다 | 컨테이너·OpenShift 환경 |
어느 항목에도 없으면 다음 세 가지를 모아 기술지원팀에 알려 주십시오 — 에이전트 버전, Java 버전, 그리고 WAS 기동 로그의 오류 메시지 전문입니다.
Transaction Trace 정보의 한글이 깨져서 표시됩니다.
OPENMARU APM은 기본적으로 UTF-8 Charset을 사용하고 있습니다. WAS에서 기본 Charset으로 EUC-KR을 사용하시는 경우, 아래와 같이 에이전트 설정을 변경하여 EUC-KR을 UTF-8으로 변환하여 한글이 출력되게 설정하시면 됩니다.
$ vi khan-agent-test.conf
----------
user.charset.encoding=EUC-KR
APM서버와 WAS 머신의 서버 시간 차이가 많습니다.
OPENMARU APM 인스턴스 시작 스크립트에 아래 옵션을 설정하시면 WAS/System 머신의 서버시간을 무시하고, 모든 시간을 OPENMARU APM 서버의 시간을 사용합니다.
-Duse.monitoring.server.time=true
OPENMARU APM의 Provisioning 기능을 사용하여 설치시 아래 ‘모니터링 서버시간사용(에이전트시간 무시)’ 옵션을 선택하고 설치하면 -Duse.monioring.server.time=true가 설정됩니다.

트랜잭션 CPU시간 표시 확인
OPENMARU APM에서는 트랜잭션의 상세 메소드 별 CPU 사용 시간을 측정하여 표시하고 있습니다. 해당 기능은 Java 1.6 부터 지원하고 있어, OPENMARU APM Java 1.5용 에이전트를 사용하는 경우에는 해당값이 0 으로 표시됩니다.
WAS를 실행하다 오류가 발생합니다.
오류 메시지
26-Feb-2016 16:57:58.334 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8090]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8090]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851)
… …
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 37
Exception Details:
Location:
org/apache/catalina/connector/CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V @2: invokestatic
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: 014e b805 0713 0509 1305 0a13 0522 1305
0x0000010: 232a 05bd 00f4 5903 2b53 5904 2c53 b605
0x0000020: 124e a700 06b6 0515 2b04 b600 03c0 0004
0x0000030: 3a04 2c04 b600 05c0 0006 3a05 1904 c700
원인
Java 7 부터 JVM 은 클래스를 적재할 때 스택맵 프레임(StackMapTable)을 검사합니다. 에이전트가 바이트코드에 측정 코드를 넣으면 분기와 try-catch 가 생기는데, 이때 스택맵 프레임을 다시 계산하지 않으면 원래 값과 어긋나 검증기가 클래스 적재를 거부합니다.
해결 방법
에이전트를 최신 버전으로 올리십시오. 에이전트가 계측한 클래스의 스택맵 프레임을 다시 계산하도록 바뀌어 이 오류가 발생하지 않습니다.
-noverify · -Xverify:none 을 쓰지 마십시오
예전에는 이 오류를 피하려고 기동 옵션에 -noverify 또는 -Xverify:none 을 넣어 검증기를
꺼 두었습니다. 최신 에이전트에서는 필요하지 않으며, 넣으면 오히려 위험합니다.
| 검증 기를 끄면 | 잘못된 바이트코드가 걸러지지 않고 그대로 적재됩니다 |
| 그 결과 | JIT 컴파일러가 그 코드를 최적화하는 시점에 JVM 이 비정상 종료(SIGSEGV)할 수 있습니다 |
| 언제 나타나나 | 적재 직후가 아니라 해당 코드가 충분히 실행된 며칠 뒤에 나타납니다 |
실제로 이 옵션을 넣은 환경에서 운영 중 JVM 이 종료되는 장애가 있었습니다. 원인을 추적하기 어려운 형태라, 기동 스크립트에 이 옵션이 남아 있으면 지우십시오.
Java 13 부터 -Xverify:none 과 -noverify 는 사용이 권장되지 않는(deprecated) 옵션이며
기동할 때 경고를 출력합니다. Oracle 은 이 옵션을 뺄 예정이라고 밝혔습니다.
그래도 오류가 계속되면
에이전트 버전과 오류 메시지의 클래스 이름을 함께 기술지원팀에 알려 주십시오.
Apache 웹서버의 서버정보가 표시되지 않습니다.
원인 및 해결방법
Apache 서버정보는 System Agent가 시작될 때, 서버정보를 가져오게 됩니다. 이때 Apache가 구동중이지 않은 경우 정보를 수집하지 못하게 됩니다.
Apache가 실행중인 상태에서 System Agent만 재기동하면 서버정보가 수집됩니다.
UNIX 서 버에서 실행시 JVM Core dump가 발생합니다.
UNIX계열에서는 OPENMARU APM에서 데이터 전송시 속도 효율적인 압축 알고리즘인 Snappy 방식을 사용할 때 오류가 발생하는 경우가 있습니다.
WAS Agent와 SYS Agent의 옵션에서 압축 알고리즘을 다음과 같이 lzw로 변경하십시오.
# agent's compression algorithm : snappy(default), lzw
agent.compress.type=lzw
컨테이너·OpenShift 환경
OpenShift JBoss EAP이미지 LogManager오류
JBoss EAP + OPENMARU APM Image를 실행시 다음 오류메시지와 같이 JBoss EAP 6.4/7.0 실행시 LogManager 오류가 발생합니다.
java.lang.RuntimeException: JBAS014670: Failed initializing module org.jboss.as.logging
at org.jboss.as.controller.extension.ParallelExtensionAddHandler$1.execute(ParallelExtensionAddHandler.java
:111)
at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:611)
at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:489)
at org.jboss.as.controller.AbstractOperationContext.completeStepInternal(AbstractOperationContext.java:290)
at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:285)
at org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1132)
at org.jboss.as.controller.ModelControllerImpl.boot(ModelControllerImpl.java:299)
at org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:292)
at org.jboss.as.server.ServerService.boot(ServerService.java:346)
at org.jboss.as.server.ServerService.boot(ServerService.java:321)
at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:254)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: JBAS011592: The logging subsystem requires the log manager to be org.jboss.logmanager.LogManager. The subsystem has not be initialized and cannot be used. To use JBoss Log Manager you must add the system property "java.util.logging.manager" and set it to "org.jboss.logmanager.LogManager"
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.jboss.as.controller.extension.ParallelExtensionAddHandler$1.execute(ParallelExtensionAddHandler.java:103)
... 11 more
원인 및 해결방안
JBoss EAP를 사용하는 경우 패치마다 Logmanager의 위치가 변경되기 때문에 contrib/openShift-launch.sh 파일의 다음 부분을 현재 버전의 JBoss EAP Container Image에 맞게 변경합니다.
$ cd jboss-eap64/contrib
$ vi OpenShift-launch.sh
… 중략 …
export JBOSS_LOGMANAGER_DIR="/opt/eap/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.14.CP/org/jboss/logmanager/main"
#export JBOSS_LOGMANAGER_DIR="/opt/eap/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.13.CP/org/jboss/logmanager/main"
#export JBOSS_LOGMANAGER_DIR="/opt/eap/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.12.CP/org/jboss/logmanager/main"
#export JBOSS_LOGMANAGER_DIR="/opt/eap/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.11.CP/org/jboss/logmanager/main"
export JBOSS_LOGMANAGER_JAR=`cd "$JBOSS_LOGMANAGER_DIR" && ls -1 *.jar'
… 중략…