JMX 로 Tomcat 모니터링 하기.

tomcat

톰캣(Tomcat)은 JEE의 Web Container 의 구현에 입니다. 흔히 WAS 서버라고 하죠. 많은 기능이 있지만 이번에는 JMX를 설정하고 이를 이용해서 Tomcat 을 모니터링 해보겠습니다.

JMX는 Java Management eXtension 으로 자바 서비스들을 관리하고 모니터링하기위한 API를 제공하는 기능을 포함하는 기술입니다. Tomcat 오 자바 서비스의 일종임으로 JMX를 이용할 수 있습니다.

톰캣(Tomcat)의 경우에 아쉽게도 기본 배포본에 이를 위한 라이브러리가 포함되어 있지않아 이 기능을 이용하기 위해서는 톰캣용 JMX 라이브러리를 다운받고 톰캣을 재시작 해줘야 합니다.

이 파일을 톰캣(Tomcat) 라이브러리 디렉토리인 lib 에 넣어줍니다.

그리고 톰캣(Tomcat)시작 스크립트에 다음과 같이 JMX 파라메터를 넣어줍니다.

여기서 주의해야할 것은 ‘192.168.96.6’ IP주소는 실제 톰캣(Tomcat)서버가 동작하는 서버의 IP주소로 바꿔야 한다는 것입니다.

그리고 다음과 같이 server.xml 파일에서 Server 섹션에 JMX 설정을 해줍니다.

이렇게 한다음에 톰캣(Tomcat)을 재시작해주면 됩니다.

JMX 는 위 server.xml 설정에서 정의한 두가지 포트를 사용합니다. 여기서는 9180, 9181이 그렇습니다. 리눅스, 윈도우즈 서버라면 반드시 방화벽에서 위 포트를 허용하는 것을 잊지 말아야 합니다.

이제 자바가 설치된 컴퓨터에서 jconsole 을 실행해서 ‘JMX서버아이피주소:9180’ 으로 접속을 시도합니다.(설정에서 인증을 빼버렸기 때문에 아이디/패스워드를 입력할 필요가 없습니다.)

jconsole접속을 완료하면 다음과 같이 192.168.96.6 에서 동작하는 톰캣(Tomcat)서버를 모니터링하고 관리할 수 있게 됩니다.

JMX

Cassandra 2.1.2 설치하기.

Cassandra 로고

 

카산드라(Cassandra)는 분산 데이터 스토리지 시스템 입니다. 아파치 재단에서 오픈소스로 만들어 배포하고 있고, 자바기반으로 제작되었습니다. peer to peer 프로토콜을 이용한 고가용성이 구현되어 있습니다.

이 문서는 카산드라(Cassandra) 2.1.2 에 싱글(Single) 노드를 위한 설치에 대한 것입니다. 설치환경은 CentOS 입니다.

jdk 7 update 75

카산드라(Cassandra) 2.1.2 는 jdk 7 update 75 버전 이상을 필요로 합니다. 만일 idk 버전 이하를 사용한다면 시작스크립트에서 오류를 내며 작동하지 않습니다. Oracle 홈페이지에서 jdk 7 update 75 를 다운받아 다음과 같이 압축을 해제합니다.

카산드라(Cassandra) 2.1.2 설치

카산드라(Cassandra) 는 리눅스의 슈퍼유저인 root 로 실행할 필요가 없습니다. 카산드라(Cassandra) 를 운영하기 위한 시스템 계정을 만들고 그 시스템 계정으로 운영하면 됩니다.

카산드라(Cassandra) 2.1.2 는 홈페이지에서 다운로드 받을 수 있습니다.

다운로드: 카산드라(Cassandra) 2.1.2

설치는 별도의 진행이 필요 없이 압축을 해제하면 됩니다.

이제 카산드라(Cassandra) 에서 사용할 디렉토리를 생성해야 합니다. 필요한 디렉토리는 다음과 같습니다.

  • data_file_directories: /home/cassandra/data
  • commitlog_directory: /home/cassandra/commitlog
  • saved_caches_directory: /home/cassandra/saved_caches

카산드라(Cassandra) 에서 위 디렉토리를 설정하기 위해서 설정파일을 편집해 줍니다.

시작 스크립트

jdk 7 update 75 에 대해 시스템 java 설정을 해주면 별도로 필요가 없지만 카산드라(Cassandra) 에서만 쓰게 하기위해서는 시작스크립트를 작성하고 jdk 7 update 75 를 인식시켜줘야 합니다.

Windows 10 테크니컬 프리뷰

Windows 10 Techincal Preview 가 1월 21일 나왔습니다. 이번 프리뷰는 컨슈머를 위한 것으로 지난해 10월에 발표한 프리뷰에 이은 두번째 공개입니다.

windows10 preview

Windows10 은 Windows 8.1 에 뒤를 이어 출시되는 MS 사의 운영체제로 관심을 모으고 있습니다. Windows 8.1 이 모바일 디바이스와 데스크탑을 통합하려고 했던 것이였는데 결과적으로 실패였다는 평가가 많았습니다. 데스크탑시장에서는 Windows 7 이 여전히 안정적이게 동작하고 많은 사용자를 확보해놓은 상태였고 Windows 8.1 을 탑재한 모바일 디바이스의 판매도 부진했습니다.

그래서 그런지 몰라도 이번에 Windows 10 에서는 기존 데스크탑으로 우선 포커스를 맞춘 느낌입니다. 기존의 시작메뉴가 되살아났고 UI 도 기존 Windows 7 하고 크게 바뀐게 없습니다.

windows10 제어판

겉으로는 UI 가 좀더 Flat 해진 느낌과 색상대비가 많이 사용되었더군요. 아이콘들도 기존보다는 채도가 높아지고 Flat 해진 느낌이였습니다.

그렇다고 Windows 7 하고 달라진 점이 없느냐? 일단 계정이 Hotmail.com 계정으로 통합되었으며 윈도우즈 OneDrive 를 기본으로 사용할수 있게 되었습니다. 더 나가 기존에는 프로그램들을 설치해야 부분이 많았는데 이제는 프로그램보다는 “앱” 이라고해서 불리우는 녀석들을 설치해 활용할 수 있게 되었습니다.

실제로 사진 미리보기 프로그램을 클릭하면 알림창으로 또 다른 앱이 있다고 알려주는데 그 앱을 설치하면 사진 미리보기 프로그램을 대체할 수 있게 됩니다.

이러한 변화는 맥의 OS X 의 환경과 매우 유사하다고 할 수 있습니다. Mac OS X 는 아이폰 처럼 프로그램들을 앱스토어에서 다운받아 설치하는 환경입니다. 별도의 설치파일을 통해서도 가능하지만 앱스토어를 통해서 무료나 유료를 구매해서 바로 설치하는 것이죠.

거기다가 Mac OS X 에서는 Apple 의 iCloud 라는 클라우드 스토리지는 활용할 수 있습니다. 이 iCloud 는 Apple 의 전 제품에서 데이터를 공유할 수 있도록 해줍니다.

Windows 10 을 간단하게 사용해보니 바로 이러한 Apple 의 Mac OS X를 많이 떠올랐습니다. 이는 결국에는 Windows 10 이 클라우드 환경을 타킷으로 하고 있는거라 생각이 됩니다.

windows10 탐색기

top 사용시 command 매칭된것만 보기.

top 은 리눅스에서 아주 유용한 시스템 모니터링 툴 입니다. 매우 많은 옵션도 제공하는데, 그중에서 프로세스의 명령어와 매칭되는 것만 보여주기도 한다. -c 옵션이 그것인데, 다음과 같이 pgrep 과 조합해서 사용할 수 있다.

 

jstack 과 thread Id, CPU, Mem 사용량 체크.

jstack 은 자바 애플리케이션의 쓰레드(Thread) 덤프를 뜰 수 있도록 도와주는 도구 입니다. 자바 애플리케이션의 쓰레드의 상태를 상세히 알 수 있어서 자바 애플리케이션의 프로파일링을 할 수 있고 이를 통해서 성능을 개선할 수 있습니다.

예를들면 다음과 같습니다.

문제는 이렇게 jstack 의 결과을 보면 당시 쓰레드에 OS 의 자원사용량을 알 방법이 없습니다. OS의 자원이라고 하면 CPU, MEM 등과 같은 것입니다.

jstack  의 결과에는 tid 라고 해서 Thread ID 가 헥사(16 진수)로 표시됩니다. 이는 OS상에서 자바 애플리케이션의 쓰레드의 PID 를 가리킵니다.

그래서 jstack 을 이용할때에 top 명령어를 이용해서 로그를 나기고 이둘을 스크립트를 이용해서 조합해서 가지고 올 수 있도록 누군가 만들었더군요.

stack overflow: Inspecting Java threads in Linux using top

답변을 다신분의 스크립트는 다음과 같습니다.

결과는 다음과 같이 나옵니다.

 

Tomcat Multi Instance 설정하기

Tomcat 7 서버는 Multi Instance 라는 기능을 가지고 있습니다. 하나의 엔진에 다수의 Instance 를 구동하게하는 것을 말합니다.

Tomcat 7 용어 정리

Tomcat Multi Instance 설정하기 전에 용어를 설명하겠습니다. Tomcat 은 엔진과 인스턴스(Intance) 로 나뉩니다. 이는 디렉토리별로 구분이 가능한데, 엔진부분과 인스턴스 부분의 디렉토리는 다음과 같습니다.

  • Tomcat Engine 부분: bin, lib
  • Tomcat Instance 부분: conf, logs, temp, work, webapps

사실 Tomcat 을 다운받아 압축을 해제하면 엔진부분과 인스턴스부분이 함께 들어 있기 때문에 별 구별이 안되는 측면이 있지만 엄밀히 따지면 위와같이 구분을 할 수 있습니다.

사실 Tomcat 엔진은 아무것도 아닙니다. Tomcat 엔진은 실제로 단독으로 구동되지 않습니다. Tomcat 엔진의 역활은 자바 소프트웨어를 실행시켜주는 역활만 담당합니다. 여기서 자바 소프트웨어라는 것이 바로 Tomcat 인스턴스 입니다.

Tomcat 엔진이 자바 소프트웨어를 실행시킨다는 말은 결국에는 JVM 이 작동하는 것입니다. 따라서 Tomcat 인스턴스는 JVM 이 구동된다는 것이며 Multi Instance 는 여러개의 Tomcat JVM 을 구동한다는 것을 의미 합니다.

Tomcat 구동

Tomcat  이 구동될때에는 시스템 환경변수에 의존 합니다.  bin/startup.sh 스크립트는 Tomcat 을 구동되도록하는 스크립트인데, 이 스크립트는 환경변수를 세팅하고 catalina.sh 스크립트를 호출하는 역활을 합니다. 실제 실행하면 환경변수내용을 볼수 있습니다.

먼저, Tomcat 엔진은 CATALINA_HOME 환경변수만 세팅합니다. 이는 Tomcat 엔진의 기본 디렉토리를 정의하는 것으로 Tomcat 의 바이너리 파일과 라이브러리가 어디에 있는지를 지정해 주는 것입니다.

CATALINA_BASE 는 Tomcat 인스턴스의 설정과 웹애플리케이션의 루트(Root) 디렉토리를 정의 합니다. CATALINA_BASE 가 Tomcat  인스턴스에 대한 환경변수이기 때문에 Tomcat 인스턴스 디렉토리인 conf, logs, temp, work, webapps 에 대한 디렉토리를 정의하는 것과 같습니다. 이는 다시 말해서 Tomcat 에서 실행시킬 자바 웹 소프트웨어의 루트 디렉토리를 지정하는 것이다라고 말 수 있습니다.

그렇다면 CTALINA_BASE 를 다르게하면 하나의 Tomcat 엔진에서 여러개의 인스턴스를 구동할 수 있다는 것이 됩니다.

Multi Instance 만들기

이 포스트에서는 다음과 같이 해보도록 하겠습니다.

  • Tomcat Engine : /opt/tomcat-7
  • Tomcat Instance: 리눅스의 시스템 계정을 만들고 자바 웹 애플리케이션 디렉토리 생성.

먼저 Tomcat Engine 을 설치해줍니다.

Tomcat Instance 를 위한 시스템 계정을 생성해 줍니다. 계정을 생성할때는 먼저 시스템 그룹을 생성하고 Tomcat 시스템 계정은 전부 이 시스템 그룹에 등록하는 방법으로 생성 합니다.

그리고 다음과 같이 Tomcat Instance 관련 파일들을 전부 복사해 줍니다.

각각의 Tomcat Instance 는 각각의 자바 웹 애플리케이션들이기 때문에 서로 가진 설정들에서 포트(port)를 변경해줍니다. Tomcat 의 포트는 다음과 같은 것들이 있습니다.

  • Shutdown port: 이 포트는 톰캣을 셧다운하는데 사용되어 집니다. shutdown.sh 스크립트가 호출되면 이 포트로 시그널(Signal)을 보냅니다. 이 포트는 Tomcat 자바 프로세스로 리스닝되고 있습니다. 만약 시그널을 받으면, 프로세스는 종료됩니다.
  • Connector port: 이 포트는 외부 클라이언트에게 애플리케이션을 보여주기위한 실제적인 포트 입니다.
  • Ajp port: 이 포트는 웹 서버가 Tomcat 과 커뮤니케이션을 위해서 사용되어 집니다. 또, 이 포트는 로드 밸런스 서버를 세팅할때에도 사용되어 집니다.
  • Redirect port: SSL 접속 요청이 들어올경우에 Catalina 는 자동적으로 이 포트로 redirect 합니다.

각각의 Tomcat Instance 는 위에서 나열한 포트들이 중복되지 않도록 설정해 줍니다. 이 설정은 각 인스턴스의 server.xml 파일에 정의되어 있습니다.

start.sh, shutdown.sh

각각의 인스턴스들에 대해서 start.sh, shutdown.sh 를 다음과 같이 만들어 줍니다.

‘INSTANCE_OWNER’ 환경변수에 인스턴스 계정명을 알맞게 넣고 작성해주면 됩니다.

그리고 이 스크립트를 실행하면 각각의 인스턴스들이 실행이 됩니다.

Tomcat 7 구조

이 문서는 Tomcat 7  구조 (Architecture) 에 관한 것입니다. 많은 부분을 “Apache Tomcat 7 More about the Cat” 을 참고 했습니다.

Tomcat 7 의 구조는 계층적 구조를 보이며 계층적으로 상속관계에 있습니다. 이를 다이어그램으로 표시하면 다음과 같습니다.

Tomcat Architecture
출처: http://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_More.html

이 구조는 Tomcat 의 설정 파일에서도 그대로 나타납니다.

Tomcat 7 디렉토리 구조.

  • bin: Tomcat 의 바이너리 및 스크립트들.
  • conf: 모든 webapp 에 적용되는 글로벌 설정들.
  • lib: 모든 webapp 에서 활용가능한 JAR-file 들. 기본적으로 servlet-api.jar(Servlet), jasper.jar(JSP), jasper-el.jar(EL).
  • logs: 서버 로그 파일들이 있는 디렉토리. Catalina.{yyyy-mm-dd}}.log 는 엔진의 로그이며 localhost.{yyyy-mm-dd}.log 는 호스트 로그.
  • webapps: 디폴트 webapp
  • work: Tomcat 의 java 소스를 컴파일한 class 파일들을 모아놓은 디렉토리.
  • temp: 임시 파일들을  위한 디렉토리.

여기서 중요한 디렉토리는 conf 디렉토리로 Tomcat 의 운영과 webapp 에 영향을 주는 파일들로 총 7개가 있습니다.

  • catalina.policy : 이 파일은 Tomcat 7 에 대한 보안정책권한(Security Policy Permissions)들을 기술해 놓은 것입니다. 이것은 JVM 에 의해서 웹 애플리케이션에 강제적으로 보안정첵권한을 적용 합니다.
  • catalina.properties: 이 파일은 서버가 시작될때에 스캔되어질 필요가 있는 공유할 서버 정의, 공유할 로더, JARs를 가지고 있습니다.
  • server.xml: Tomcat 에서 매우 중요한 파일중 하나인데 서버의 IP 주소, 포트, 버추얼 호스트, 컨텍스트, 패스등과 같은 매우 중요한 정보를 가지고 있습니다.
  • tomcat-users.xml: 이 파일은 인증, 권한부여, 롤기반 정의에 사용될 수 있습니다. 인증을 위한 users/passwords/roles 의 데이터베이스나 컨테이너 관리 보안을 위해 사용되어집니다. 사용자를 추가/삭제나 존재하는 사용자에게 롤을 할당/비할당하기 위해서 이 파일을 편집하면 됩니다.
  • logging.properties: 이름에서 짐작했듯이, Tomcat 인스턴스의 로딩 속성들을 정의할 수 있습니다.
  • web.xml: 이것은 Tomcat 인스턴스에 의해서 로드되어 모든 웹 애플리케이션에 적용되어지는 기본 값들을 정의합니다. 만약 웹 애플리케이션이 자신만의 deployment 디스크립터를 가지고 있다며, 이 컨텐츠는 항상 기본 스크립터에 의해서 정의되어진 설정값을 오버라이드(override) 합니다.
  • context.xml: 이 파일의 내용들은 모든 애플리케이션에 로드됩니다. 세션 퍼시스턴스, Comet 접속 트래킹과 같은 파라메터 설정들을 할 수 있습니다.

Tomcat 7 설치

tomcat 이 문서는 리눅스 Tomcat 7 설치 에 관한 문서 입니다.

1. Tomcat 7 스펙

Tomcat 7 의 스펙은 다음과 같습니다.

  • Servlet: 3.0
  • JSP Spec: 2.2
  • EL Spec: 2.2
  • WebSocket: 1.1
  • Support Java Versions: 6 and later

Java 1.6 버전 이상이 필요 합니다. CentOS 7 이라면 다음과 같이 설치할 수 있습니다.

2. Download

다운로드는 Apache Tomcat 페이지에서 다운로드 한다.

3. 설치

설치는 압축을 해제하는 것으로 끝이 난다.

4. 테스트

Tomcat 7 에서는 환경을 테스트해 볼 수 있는 스크립트가 두가지 있습니다.

  • version.sh – 현재 Tomcat 7 에 대한 버전 정보가 나옵니다.
  • configtest.sh – Tomcat 7 의 설정파일에 문제가 없는지를 테스트 해줍니다.

configtest.sh 는 Tomcat 을 실행시키지 않는 상태에서 실행하는 것이 좋습니다.

5. 시작

 

FTP 사용하기(파일질라(FileZilla) 이용)

호스팅 서비스를 신청하면 으레 FTP 계정도 함께 사용할 수 있습니다. 요즘은 SFTP라고도 보안성이 뛰어난 FTP만 제공하는 곳도 있습니다. 그런데, 이걸 사용할 줄 모르시는 분들도 많습니다.

이 문서는 FTP 사용기(파일질라(FileZilla) 이용) 에 관한 것입니다.

1. 다운받기

파일질라 다운로드

웹 브라우저 주소창에 http://filezilla-project.org 를 치면 위 화면과 같이 나옵니다. 이 화면에서 초록색 박스 링크를 클릭 합니다.

파일질라 다운로드

“Download Now” 를 클릭해서 파일을 다운로드 받습니다.

다운로드받은 파일을 더블클릭해서 설치를 해주세요. 특별한 옵션이 없기 때문에 그냥 “다음” 버튼을 클릭하기만하면 설치가 됩니다.

설치가 다되었다면 윈도우즈 메뉴에서 FileZilla 를 찾아서 실행을 해줍니다.

파일질라 실행 메뉴

2. 접속하기

FTP 를 사용하기 위해서는 다음과 같은 정보가 필요 합니다.

  • 호스트: 보통 웹 브라우저에서 사용하는 도메인 주소나 IP 주소
  • 아이디: 로그인을 위한 사용자 아이디
  • 비밀번호: 로그인을 위한 사용자 패스워드
  • 접속 포트: FTP 기본포트인 21 번

파일질라 접속

위 화면과 같이 빨간밑줄된 곳에 접속 정보를 모두 입력해주고 “빠른 연결”을 클릭해 줍니다.

파일질라 접속 성공

위와같이 “리모트 사이트” 에 폴더들이 보이면 정상으로 접속이 성공한 것입니다.

3. SFTP 로 접속하기.

가끔은 SFTP 를 이용해 접속할 수도 있습니다. SFTP 는 SSH 터미널 접속의 파일전송 프로토콜을 지원하는 것으로 보안접속, 그러니까 파일전송시에 내용을 암호화해서 주고받는 방법을 제공합니다.

파일질라에서도 이 SFTP 를 이용하실 수 있는데, 사용방법은 다음과 같습니다.

  • 호스트: 도메인이나 IP 입력시에 ‘sftp://’ 를 앞에 붙여줍니다. ex) sftp://example.org
  • 포트: 22

파일질라 SFTP 접속

SFTP 는 접속을 위한 키교환이 필요합니다. 잘 모르겠다면 확인을 눌러주면 됩니다.

파일질라 SFTP 접속 성공

위 화면을 보면 SFTP 는 FTP 와 달리 접속이 성공하였을때에 리모트 사이트의 디렉토리에 숨김파일들을 모두 다 보여 줍니다. 숨김파일은 Unix 계열에서는 파일 이름 맨 앞에 ‘.’ 이 붙은 것을 말하며 일반적으로 보이지 않습니다. 하지만 SFTP 로 접속을 하면 모두 보입니다.