제니퍼 에이전트 설치 트러블슈팅

제니퍼 서버 구성 변경

이 절에서는 제니퍼 서버 및 에이전트가 사용하고 있는 네트워크 통신 포트 구성을 변경하는 방법에 대해 설명한다.

클라이언트를 위한 설정 변경

제니퍼 서버와 제니퍼 클라이언트는 웹 기반 사용자 인터페이스 제공을 위해서 HTTP 프로토콜을 사용한다. 이 때 사용하는 기본 HTTP 포트 번호는 7900이다. 그리고 제니퍼 서버 정지를 위한 기본 포트 번호는 7999이다. 이 포트 번호를 변경하려면 $JENNIFER_HOME/server/bin/catalina.sh(bat) 파일을 수정한다. 유닉스 혹은 리눅스의 경우에는 catalina.sh 파일의 다음 부분에서 포트 번호를 설정한다.

JAVA_HOME="$JAVA_HOME"

if [ -z "${STARTUP_PORT}" ]
then
    export STARTUP_PORT="7900"
fi

if [ -z "${SHUTDOWN_PORT}" ]
then
    export SHUTDOWN_PORT="7999"
fi

윈도우즈의 경우에는 catalina.bat 파일의 다음 부분에서 포트 번호를 설정한다.

set JAVA_HOME=%JAVA_HOME%

if "%STARTUP_PORT%" == "" SET STARTUP_PORT=7900
if "%SHUTDOWN_PORT%" == "" SET SHUTDOWN_PORT=7999

자바 애플릿은 차트 구성에 필요한 데이터를 제니퍼 서버로부터 TCP 통신을 통해서 획득한다. 이 때 사용되는 제니퍼 서버의 기본 TCP 포트 번호는 제니퍼 서버의 설정파일인 jennifer.properties파일에 아래의 옵션으로 설정한다. 기본 포트 번호는 6701이다.

server_tcp_port = 6701

제니퍼 에이전트를 위한 설정

제니퍼 에이전트는 성능 데이터를 UDP 방식으로 제니퍼 서버에 전송한다. 제니퍼 서버는 제니퍼 에이전트가 보내는 성능 데이터를 3개의 UDP 포트로 분리해서 받아들인다. 제니퍼 에이전트는 제니퍼 서버의 server_udp_runtime_port 옵션으로 설정한 UDP 포트를 통해서 모든 트랜잭션의 시작과 종료와 관련한 데이터를 전송한다. 이 데이터는 크기는 매우 작으며 주로 X-View 차트를 표현하는데 사용된다. 기본 포트 번호는 6901이다.

server_udp_runtime_port = 6901

제니퍼 에이전트는 제니퍼 서버의 server_udp_listen_port 옵션으로 설정한 UDP 포트를 통해서 1초마다 반복적으로 서비스 요청률, 평균 응답 시간 등의 일반 성능 데이터를 전송한다. 기본 포트 번호는 6902이다.

server_udp_listen_port = 6902

제니퍼 에이전트는 제니퍼 서버의 server_udp_lwst_call_stack_port 옵션으로 설정한 UDP 포트를 통해서 2초마다 반복적으로 X-View 트랜잭션 프로파일 데이터를 전송한다. 기본 포트 번호는 6703이다.

server_udp_lwst_call_stack_port = 6703

앞에서 설명한 UDP 포트 번호를 수정할 때는 제니퍼 서버가 바인딩하고 있는 포트에 맞게 수정해야 한다.

그리고 제니퍼 에이전트가 UDP 방식으로 보내는 성능 데이터를 제니퍼 서버가 받을 때 사용할 IP 바인딩 주소를 지정할 필요가 있다. 이는 자바 TCP 소켓 프로그래밍에서 new java.net.DatagramSocket(port, ip) 생성자의 두번째 파라미터 IP에 해당하는 값이다. 하드웨어에 둘 이상의 네트워크 카드가 있다면, 특정 네트워크 카드로 들어오는 요청만 바인딩하고자 할 때 설정한다. udp_server_host 속성을 “0.0.0.0”으로 지정하면 모든 네트워크 카드에서 들어오는 패킷을 받을 수 있다.

udp_server_host = 0.0.0.0

에이전트 TCP연결 옵션

제니퍼 서버와 제니퍼 에이전트 혹은 제니퍼 클라이언트 사이에 방화벽이 존재하면, 앞에서 설정한 포트 번호가 방화벽을 정상적으로 통과하도록 설정해야 한다.

UDP 네트워크에 대한 방화벽 테스트는 제니퍼 에이전트가 서버에 등록이 안된경우를 참조한다.

한 서버에 복수의 제니퍼 에이전트 설치

제니퍼 에이전트를 설치하다보면 물리적으로 하나의 서버에 복수의 인스턴스가 존재하는 경우가 많다. 이 경우 제니퍼 에이전트를 구성하는 방법에 대해서 기술한다. 동일한 제니퍼 서버로 성능데이터를 전송하는것을 가정하여 기술한다. 동일한 Java 애플리케이션 서버에서 동작하고 있는 복수의 인스턴스에 제니퍼 에이전트를 설치할 경우, 기본적으로 사전설치작업(pre-installation)은 한 번만 수행을 한다. 두 번째 부터의 설치는 기 구성된 에이전트 구성파일(예, w11.conf)의 복사 및 수정, 그리고 해당 인스턴스에의 설정 작업으로 이루어진다. 제니퍼 에이전트를 설치하면서 구성된 에이전트 구성파일(예, w11.conf)을 적절한 파일(예, w12.conf)로 복사하고 해당 파일의 내용중 아래의 옵션 부분을 변경해야한다.

반드시 변경해야하는 옵션

옵 션

설 명

agent_name

영어와 숫자의 조합으로된 3글자의 에이전트 구분자를 지정한다.

logfile

제니퍼 에이전트 로그기록파일의 경로 및 파일명을 지정한다.

agent_tcp_port

제니퍼 에이전트에서 바인딩 할 포트를 지정한다.

에이전트를 설치할 Java 애플리케이션 서버의 자바 옵션에 변경된 에이전트 구성파일 경로 및 라이브러리를 설정한다.

제니퍼 에이전트 설치 트러블 슈팅

이 절에서는 제니퍼 에이전트 설치 작업중 발생할 수 있는 문제와 그에 대한 대응책을 기술한다.

에이전트 설치후 웹 애플리케이션 서버가 기동이 안되는 경우

  1. 제니퍼 에이전트의 설정을 웹 애플리케이션서버에 기술할 때, 오타가 자주 발생한다. 정확하게 기술되었는지 확인한다.

  1. 오타가 없이 제니퍼 에이전트의 설정이 정상적인데도 기동이 되지 않을 경우는 lwst 의 생성이 잘 못 되었을 가능성이 높다. 이 경우 lwst40.sh(bat)명령으로 lwst파일을 재생성 한다.

lwst 생성시 인스톨 대상 웹 애플리케이션 서버가 사용하고 있는 JVM의 rt.jar(Sun JDK), core.jar(IBM JDK), vm.jar(IBM JDK), jndi.jar(IBM JDK 1.6) 파일을 기반으로 생성이 되어야 한다.

lwst생성 방법 : lwst40.sh(bat) [command option] [rt.jar(core.jar)]

WAS가 사용하는 JDK가 1.4 까지는 [commnad option] 에 safe , 1.5부터는 jdk15 를 넣는다.

제니퍼 에이전트가 서버에 등록이 안된경우

  1. 웹 애플리케이션서버옵션 중 [-Djennifer.config] 옵션의 설정에 오타가 없는지, 설정한 파일이 해당 위치에 존재하며, 읽기 권한이 있는지 확인한다.

  1. 제니퍼 에이전트 옵션파일(예, w11.conf) 중 udp_server_host, server_udp_runtime_port, server_udp_listen_port,server_udp_lwst_call_stack_port 의 값이 제니퍼 서버의 설정값과 동일한지 확인한다.

  1. 제니퍼 에이전트와 서버사이의 방화벽과 같은 네트워크 장비의 제약으로 인해 통신이 정상적으로 이루어지지 못할 경우가 있다. TCP의 경우 telnet 프로그램으로 확인이 가능하며, UDP의 경우 제니퍼 에이전트에서 제공하는 udptest.sh(bat) 유틸리티를 실행하여 제니퍼 서버의 로그에 아래와같은 메세지가 출력되는지 확인한다.

RECV(6703) from=127.0.0.1 data=100 bytes
  1. 간혹 server_udp_lwst_call_stack_port 포트를 테스트 할때 마지막 인자값이 작은경우는 성공하고, 인자값이 큰 경우에 실패하는 경우가 있다. 이 경우는 시스템 혹은 네트워크단에서 패킷의 크기를 제한하고 있는경우다. 제니퍼 에이전트에서도 한번에 전송할 수 있는 패킷의 사이즈를 지정할 수 있는 옵션이 있다. xview_profile_udp_packet_size 값을 줄여가면서 정상적으로 통신이 되는지 확인한다.

제니퍼 에이전트가 등록은 되지만 애플리케이션이 실행되지 않을 경우

WAS의 로그나 화면에 아래와 같은 메세지가 나오는 경우가 있다.

java.lang.NoClassDefFoundError: com/javaservice/jennifer/agent/HttpServiceTrace
	javax.servlet.http.HttpServlet.service(HttpServlet.java)

에이전트 설정 중 아래의 설정이 정상적인지 확인한다.

using_adaptable_http_agent=true
http_agent_classpath=c:/tmp/agent/jennifer.http.jar

Invalid LicenseKey 메세지가 나오는 경우

제니퍼 에이전트에서 agent_tcp_port 옵션에 등록된 포트가 연결이 되지 않을 경우, 장애진단, 구성관리메뉴와 실시간 액티브 서비스 리스트 화면등이 메뉴가 정상적으로 나오지 않는다.

CPU / Memory 정보가 안나오는 경우

제니퍼 에이전트의 libjennifer20.so(sl) (Windows의 경우 jennifer20.dll)파일은 시스템, 자바 프로세스의 CPU 사용률 및 메모리 사용량을 보여준다. 해당 라이브러리가 설치되지 않은 경우 시스템/메모리 관련된 성능데이터를 수집하지 못한다. 그러나 제니퍼 에이전트가 동작하는데는 문제가 없다.

제니퍼 네이티브 라이브러리가 정상적으로 로딩되지 않았다면, 제니퍼 에이전트 로그파일에 아래와 같은 메세지가 보인다. 이 경우 제니퍼 클라이언트 화면의 [ 장애진단 | 유틸리티 | 시스템 환경변수 ] 메뉴에서 해당 에이전트를 선택하여, sun.boot.library.path 의 값을 확인한다. 해당 디렉토리내에 테스트 완료된 libjennifer20.so(sl) (Windows의 경우 jennifer20.dll) 파일이 복사되었는지 확인한다.

JENNIFER SysProf libjennifer20.so(sl) shared library loaded successfully.

test.sh 파일 내용중 java -Djava.library.path=. 이 부분에서 java 실행파일은 반드시 웹 애플리케이션서버가 사용중인 java 실행파일이어야 한다.

sysprof=ThreadCpuJava5

X-View 에 점이 표시되지 않는 경우

제니퍼 에이전트가 서버에 등록되어 있고, 제니퍼 서버와 에이전트간의 네트워크도 문제가 없는데도 X-View에 점이 표시되지 않는 경우 아래의 내용을 확인한다.

http_service_class =org.apache.struts2.dispatcher.FilterDispatcher
http_service_method=doFilter

X-View 프로파일에서 SQL이 보이지 않는 경우

JDBC 커넥션 추적설정이라 함은 java.sql.Connection 객체를 JenniferConnection 객체로 Wrapping하는것을 말한다. 제니퍼에서는 3가지의 JDBC 커넥션 추적 설정 방법을 제공한다.

  1. JNDI와 javax.sql.DataSource로 추적하는 경우를 유형1이라고 하며, 제니퍼 에이전트에 특별한 설정없이 운영할수 있다.

SQL/JDBC에 대한 정보는 Servlet/JSP Thread에서의 JDBC요청만 추출된다. 만약, Non Servlet/JSP Thread에서 발생하는 JDBC/SQL정보를 추출하려면 명시적으로 enable_non_servlet_thread_jdbc_trace = true 로 설정한다.

  1. 애플리케이션에서 java.sql.DriverManager 클래스를 통해서 java.sql.Connection 객체를 획득하는 경우를 유형 2라고 한다.

  1. 애플리케이션이 커넥션 풀의 역할을 담당하는 임의의 클래스를 통해서 java.sql.Connection 객체를 획득하는 경우를 유형 3이라고 한다.

JDBC 커넥션 설정 유형 2 의 경우, 애플리케이션의 소스코드에 conn = DriverManager.getConnection(“jdbc:apache:commons:dbcp:/poolname”); 와 같이 사용하는 경우 에이전트의 설정 파일에 다음과 같이 설정할 필요가 있다.

user_defined_jdbc_connectionpool_prefixes=jdbc:apache:commons:dbcp

JDBC 커넥션 설정 유형 3의 경우, java.sql.Connection을 반환하는 메소드를 아래와 같은 형식으로 설정해야 한다.

jdbc_connection_get=db.DBConnectionManager.getConnection(String)

유형 3으로 설정시 유의사항

해당 설정을 적용할려면 Java 애플리케이션 서버(인스턴스)를 재시작 해야만 적용된다.

프레임워크별 JDBC 설정방법

jdbc_connection_justget = org.hibernate.jdbc.ConnectionManager.getConnection()
jdbc_connection_get=com.ibatis.sqlmap.engine.transaction.jdbcJdbcTransaction.getConnection()
jdbc_connection_get = org.apache.commons.dbcp.PoolingDataSource.getConnection()

애플리케이션 내에서 사용하는 JDBC Connection 방법을 모르는 경우

  1. 에이전트 설정파일에서 lwst_trace_remote_port의 옵션에 사용하는 DB의 포토 번호를 기술하고 해당 옵션을 활성화시킨다. (맨앞의 # 를 삭제).

  1. 어플리케이션 서버를 재기동한다.

  1. 제니퍼 관리 콘솔 화면의 「장해 진단」→「파일/소켓」화면에 해당 포트로 접속할 시점의 스택트레이스를 확인한다.

  1. 확인된 Connection 부분을 jdbc_connection_get 혹은 jdbc_connection_justget 에이전트 옵션에 설정한다.

X-View 프로파일에서 SQL 파라미터가 정상적으로 표시되지 않을 경우

제니퍼 에이전트와 서버의 file.encoding이 다른 경우에 제니퍼 서버가 수집한 성능데이타가 정상적으로 표시되지 않을 수 있다. 이 경우에는 명시적으로 제니퍼 서버의 기동옵션의 file.encoding값을 제니퍼 에이전트의 server_encoding옵션으로 설정한다.

제니퍼 에이전트 설치 후 네이티브 메모리릭 발생할 경우

Sun java 1.5, 6.0 등에서 Native Memory Leak 현상이 발생하면 웹 애플리케이션서버의 자바 실행옵션에 아래의 옵션을 추가한다.

-XX:CompileCommand=exclude,org/apache/jennifer/bcel/classfile/Attribute,readAttribute

에이전트 설치 후 애플리케이션 쿠키정보가 유실된 경우

제니퍼 에이전트는 방문자 수와 동시단말 사용자 수를 수집하기 위해서 쿠키를 사용한다. 그런데 사용할 수 있는 쿠키의 숫자와 크기에는 제한이 있기 때문에, 기존 자바 애플리케이션에서 많은 쿠키를 사용하고 있으면 쿠키 정보가 유실될 수가 있다. 이 경우 아래의 옵션을 적용한다.

hotfix_remote_address_for_wmonid = true

동일한 설정으로 다중프로세스에 설치할 경우

제니퍼 에이전트는 자바 프로세스 단위로 설정해야 한다. 각 자바 프로세스의 -Djennifer.config 옵션을 다르게 설정해야 하기 때문이다.

그러나 일부 WAS나 자바 데몬이 동일 실행 명령에 설정된 값을 이용하여 여러 개의 다중 프로세스를 실행하는 경우가 있다. 이 경우에는 각 자바 프로세스를 위한 서로 다른 -Djennifer.config 옵션을 개별적으로 설정할 수 없다.

이런 다중 프로세스 환경에 제니퍼 에이전트를 설치할 때는 공통으로 사용되는 자바 실행 옵션에 -Dconfig.auto=true를 추가로 설정한다

자세한 내용은 메뉴얼 [제니퍼 에이전트 운영관리] 부분의 [다중 프로세스에 제니퍼 설치] 부분을 참조한다.

온라인 설치 기술지원 요청

기술지원 요청 전에 제니퍼소프트 웹사이트(www.jennifersoft.com)의 [도큐멘트]나 [Q&A]를 확인해 주십시요. 최신 매뉴얼및 각종 문서, 과거 문의에 대한 답변이 게재되어 있습니다.

본 문서의 내용에 불명확한 곳이 있을 경우및 설치와 관련된 문제가 있을시, 제니퍼소프트 기술지원팀은 무상 기술지원을 제공하고 있습니다.

설치시 문제가 발생한 경우 Java 애플리케이션 서버, DBMS, 제니퍼 서버/에이전트의기본정보 함께 설치트러블슈팅의 결과 파일을 첨부해서 tech@jennifersoft.com으로 보내주십시요.

참고로 제니퍼 버전 정보는 제니퍼 에이전트 디렉토리에는 있는 version.sh 명령어를 실행시켜 얻을 수 있다.