Category: Programming

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 8 설치.

tomcat

Tomcat 8 설치.

 

 

CentOS 7 에서는 OpenJDK 1.7 이 기본으로 탑재되어 있다. Java 7 에 대응하는 Tomcat 은 버전 8인데, 이에 대한 설치에 대한 것입니다.

Spec

Tomcat 8 의 스팩은 다음과 같다.

  • Servlet : 3.1
  • JSP Spec: 2.3
  • EL Spec: 3.0
  • WebSocket Spec: 1.1
  • Support Java Versions: 7 and later

Download

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

설치

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

시작

웹에서 http://localhost:8080 으로 접속을 시도해 페이지가 뜬다면 정상이다.

Stack 알고리즘.

스택(Stack) 알고리즘.

흔희들 스택(Stack) 알고리즘을 가장 단순한 것으로 생각한다. 아니 다시말해서 가장 단순한 것으로 생각한 나머지 별 할일 없는 알고리즘으로까지 치부하는게 문제다. 하지만 스택 알고리즘은 가장 단순하면서 그 단순함으로 인해서 가장 강력하고 널리쓰이는 알고리즘이다.

스택(Stack) 을 말할때에 가장 먼저 떠오르는 것이 LIFO 다. Last-In First-Out. 가장 나중에 들어간 데이터가 가정 먼저 나온다는 것을 영어로 표현한 것인데, 이것을 다른 관점에서 생각해보면 역정렬 알고리즘에 일종이기도 하다.

reverse_order
Figure1. Reverse Order by Stack

스택에 넣었다 꺼내면 역정렬된 상태가 된다.

이를 잘 활용할 수 있는 것이 있는데, 진수 변환이다. 10진수를 2진수로 진수 변환할때를 보자.

Stack 알고리즘
Figure2. Stack 알고리즘

중학교때 배웠던 10진수를 2진수로 만드는 수학 방법이다. 이것을 자세히 보면 나머지로 나오는 것들을 스택에쌓아두고 역으로 뽑아내면 그것이 바로 이진수가 된다는 사실을 알 수 있다.

스택의 또 다른 용법에는 체커(Checker) 도 있다.

위는 간단한 PHP문법이다. PHP는 함수를 사용하거나 조건문과 같은 문법을 사용할때에 ‘{‘ 를 사용한다. ‘{‘ 로 열고 ‘}’로 닫는 식이다. 그래서 항상 쌍으로 존재하는데, PHP 컴파일러는 이러한 것이 오류가 없는지를 어떻게 체크를 할까?

다음과 같이 스택을 이용하면 간단히 체크할 수 있다.

Stack 의 괄호 체크.
Figure3. Stack 의 괄호 체크.

처음에 ‘{‘ 를 만나면 스택에 넣는다. 그리고 ‘}’를 만나면 스택에서 제거한다. 최종적으로 더 이상 빼내야할 ‘{‘ 이 없고 스택이 텅 비어있다면 PHP 컴파일러는 문법으로 쓰이는 ‘{‘ 가 제대로 사용되었다라고 판단한다. 그래서 위 PHP의 예제를 스택을 이용해서 체크해보면 ‘{‘ 가 스택에 하나 남게되어 PHP 문법에 오류가 있다는 것을 알 수 있다.