스레드: 10개의 글
운영체제 - 프로세스(Process)란? 프로세스상태,Context Switching 쓰레드(Thread)란 간단히 말해 프로세스 내에서 실행되는 실행 단위이다. 프로세스는 이러한 쓰레드를 한 개 이상으로 나눌 수 있다. 쓰레드는 프로그램 카운터와 스택 포인터 등을 비롯한 쓰레드 실행 환경 정보(Context 정보), 지역 데이터, 스택을 독립적으로 가지면서 코드, 전역 데이터, 힙을 다른 쓰레드와 공유한다. 그림을 보면 프로세스 내에서 쓰레드는 별도의 Stack(+ 스레드 실행 환경 정보, 지역데이터, 레지스터 등)을 할당받고 Code, Data, Heap 영역은 같은 프로세스 내의 다른 쓰레드와 공유한다. 프로세스 하나에 포함된 쓰레드들은 공동의 목적을 달성하려고 병렬로 수행한다. 이러한 쓰레드를 이..
운영중인 톰캣이 OutOfMemory를 뱉어내고 작동을 안하는 경우가 있다. 관제 시스템이 잘 갖춰진 운영 환경이라면, 담당자에게 바로 알림이 가고 특정 시간내에 처리가 가능하겠지만,그렇지 않은경우에는 의도치 않게 장애가 길어지게 된다. OutOfMemory가 발생된 후 톰캣이 실행중인데 작동 불능에 빠졌을경우 누군가 조치를 취해주지 않거나 톰캣 상태를 모니터링해주는 자동화된 도구가 없다면 어떻게 해야할까? 이럴때는 JVM 옵션을 이용하여 후속 조치가 가능하다. OnOutOfMemoryError 옵션을 이용할 경우 OutOfMemroy 발생 이후에 특정 동작을 지정할 수 있다. 톰캣 catalina.sh 파일의 CATALINA_OPTS 옵션에 "-XX:+HeapDumpOnOutOfMemoryError -..
서버를 운영하다보면 장애 대응을 위하여 여러가지 대비책을 세우게 되는데,Tomcat을 사용하는 곳에서 많이 이용하는것중 하나가 톰캣을 자동으로 시작 시킬수 있는 shell Script가 아닐까 싶다. 아래 스크립트는 톰캣의 PID와 개수를 확인하여 톰캣이 실행중이지 않을때 톰캣을 자동으로 시작시켜주는 쉘 스크립트 이다. * 주의 : 서버에 톰캣 1개만 설치되어 있다는 가정하에 작성 --------------------------------------------------------------------------------------------------------#!/bin/sh export JAVA_HOME=/usr/local/javaexport PATH="$PATH:$JAVA_HOME/bin"exp..
Tomcat에서는 특정 IP의 접근을 제한하거나, 허용할 수 있는 옵션을 제공한다. 물론 웹 서비스내에서 인터셉터 또는 필터링 등을 이용하여 IP를 체크한 뒤 걸러낼수는 있지만, 접근을 제한하는 IP등이 명확하다면 서비스단이 아닌 Tomcat 내부 설정에서 컨트롤 하는것이 운영하기에 더 편할때가 있다. Tomcat 내에서 IP를 허용/제한하는 방법은 Tomcat의 설정파일인 server.xml에서 .. 사이에 다음과 같은 내용을 추가하고 재시작 하면된다. [IP 허용] [IP 거부] 이밖에 Tomcat의 valve 컴포넌트에서는 다양한 옵션을 제공하는데, 추가로 정보가 더 필요한 사용자는 아래 URL 에서 확인이 가능하다. http://tomcat.apache.org/tomcat-7.0-doc/confi..
로컬환경으로 Tomcat을 이용하여 개발하다 보면 종종 세션이 끊길때가 있다. 물론 Tomcat 1개에 1개의 서비스만 올려서 사용중이라면 그럴일은 없겠지만, 여러 프로젝트를 여러개의 서비스에 올려서 개발할경우 종종 로그인이 끊어지는 경우가 있다. 여러개의 서비스 일지라도 1개의 서비스만 집중적으로 개발할 경우 그럴일은 없는데, 하루에 여러 프로젝트를 손대다보면 세션 끊김이 발생한다. 예를들어 로컬에서 개발시 A라는 프로젝트를 로그인을 한 후 B라는 프로젝트를 로그인 하면 A 프로젝트에서 로그인 했던 세션이 끊어진다. 해당 문제는 바로 JSessionID가 충돌하여 발생하는 문제라고 볼수 있다. JSessionID는 브라우저에서 로그인등을 통해 세션이나 쿠키등이 생성될경우 사용자의 고유정보를 갖고있는데,..
일반적으로 톰캣을 구동하고 종료하는 명령어는 $TOMCAT_HOME/bin/ 에 있는 startup.sh 와 shutdown.sh 이다. 그런데 리눅스 서버에서 톰캣을 운영하다 보면 종종 어이없는 일이 발생을 한다. 그중에 하나가 shutdown.sh 명령을 실행했음에도 불구하고 톰캣이 죽지 않는 상황이 발생할 때가 있다. 물론 이 경우 리눅스에서 PID를 확인 한 후에 kill -9 명령어를 통해 톰캣 프로세스를 종료시킬 수는 있으나 매번 이렇게 종료시키에는 귀찮음이 따른다. 이럴때는 CATALINA_PID를 이용하여 shutdown.sh에 force 옵션을 사용하면 된다. CATALINA_PID를 지정하게 되면 톰캣이 구동될때 프로세스ID를 해당 파일에 기록하게 되며, shutdown시 해당 PID를..
지난번에 리눅스 시스템내에서 심볼링 링크를 생성하고 삭제하는 방법을 포스팅한적이 있다. 오늘은 Apache 와 Tomcat에서 심볼링 링크를 일반 디렉토리와 동일하게 읽을수 있도록 설정하는 방법을 포스팅하겠다. Apache와 Tomcat은 기본 설정으로는 심볼릭 링크를 읽지 못한다. 이는 보안 측면으로 기본설정에서 막아둔 것인데 간단한 옵션 설정을 통해 설정변경이 가능하다. 1. Tomcat $TOMCAT_HOME/conf/server.xml 파일을 열어 Context 구문에 allowLinking="true" 를 지정해 주면 된다. 2. Apache2 $APACHE_HOME/conf/httpd.conf 파일을 열어 태그 밑에 Options FollowSymLinks 를 지정해주면 된다. Options ..
나같은 경우 로컬 개발환경이나 테스트 서버의 경우 수많은 프로젝트들이 존재한다. 운영환경도 아닌 개발 및 테스트 환경에서 프로젝트가 추가될때마다 톰캣을 추가하는것은 사실 불필요하다. 어차피 내부 개발인력과 테스터 인력들만이 접속해서 확인할텐데 그때마다 톰캣을 새로 추가하는것은 오히려 리소스 낭비이다. 그래서 나는 로컬이나 테스트서버의 경우 1개의 톰캣에 3~4가지의 서비스들(프로젝트들)을 올려서 사용한다. 톰캣에 여러 서비스를 올리는것은 간단하다. TOMCAT_HOME/conf/server.xml 에서 service 부분을 추가해 주면 된다. [server.xml] 이때 주의할점은 크게 다음과 같다. 1. Service Name 과 Engine Name은 서로 동일해야 한다 2. Connector por..
개발을 하는 어느날 연계사로부터 새로운 모듈을 받았다. 해당 모듈을 적용할때 주의사항은 단 하나. WEB-INF/lib 또는 TOMCAT_HOME/lib 에 해당 모듈을 넣지말고 별도로 classpath에 적용할것. 그래서 별 생각없이 개발PC(윈도우) CLASSPATH 에 해당 모듈을 추가하고 커맨드창에서 모듈을 실행하니 잘 나온다. 그런데 해당 모듈을 웹 프로젝트에 적용하니 모듈 호출이 안된다. 어라? 내가 뭘 잘못했나 한참을 생각했다. 결국은 톰캣 자체 CLASSPATH에 추가를 한 뒤 해결할 수 있었으나 이 찜찜함. 그래서 열심히 구글링을 해 본 결과 톰캣은 OS 환경변수를 그냥 무시해 버린단다. 어찌되었든 톰캣 TOMCAT_HOME/bin/catalina.sh(bat) 파일에 CLASSPATH를..
톰캣은 오픈소스이다 보니 기본적으로 설정되어 있는 값들이 상당히 루즈하게 되어있다. 기본 설정값들을 그대로 사용하는것보다는 자신의 서버 환경에 맞게 어느정도 튜닝이 되어야 톰캣이 최적의 성능을 낼 수 있다. 오늘은 내가 사용하는 기본적인 톰캣 튜닝 몇가지 방법을 정리해 보았다. 톰캣 설정을 하기 위해선 $TOMCAT_HOME/conf/server.xml 에서 설정을 해주면 된다. 1. Listener 톰캣 시작시 root로 실행하는것을 방지하는 부분이다. 톰캣 단독으로 80포트 이용시에는 필요없을 부분이긴 하지만, 그렇지 않다면 해당 옵션을 켜주는게 좋다. root 실행은 퍼미션 문제든 여러 문제점을 야기하므로 특별한 경우가 아니면 root 실행은 하지 말자. * 구문은 주석으로 처리되어 있으니, 주석을..