엄범

 

tomcat이 하는 일? = Servlet Container

Java Servlet 이란

  • 자바에는 요청을 받아서 처리하는 일을 담당하는, servlet이라는 actor가 있음.
  • 요청을 받으면 서블릿은 자기가 알아서 실행되는게 아니라 서블릿을 실행하는 주체가 따로 있다.
  • 이게 바로 서블릿 컨테이너. 즉, 요청을 받으면 서블릿을 해당 요청을 파라미터로 실행해주는게 서블릿 컨테이너이고,
  • tomcat이 바로 서블릿 컨테이너다.

 

tomcat log

  • tomcat 로그에 찍히는 log는 여러 스레드가 동시에 기록하기 때문에, 한 세션의 요청이 연속해서 바로 뒤이은 로그에 찍혀있지 않을 수 있다. 
  • 그래서 로그를 추적하기 위해 exec-* 번호를 같이 기록해 주는데, 이는 스레드 번호를 의미한다. 
  • 로그는 이 exec-* 번호를 따라가면서 보면 된다.

 

tomcat의 async 비동기 지원

 

tomcat 설정

server.xml
  • Realm은 웹 애플리케이션에서 정당한 사용자인지 식별하고, 아울러 각 사용자에 맞는 roles을 지정하는 사용자와 비밀번호의 "database" 다. 라고 얘기하고 있는데, 여기서 말하는 사용자란 tomcat manager 로그인 할 때 쓰는 사용자를 말한다
  • UserDatabaseRealmn이면 `` $CATALINA_BASE/conf/tomcat-users.xml``에 명시된 사용자를 불러온다거나, 뭐 그런 기능이다.
  • tomcat manager는 기본적으로 페이지에 접근이 가능한 상태이기 때문에, 안쓸거면 앞단의 nginx 같은 곳에서 접근 못하게 하는 것이 좋다.
    • `` $address/manager/html``
    • `` $address/examples``와 그 하위. 여기도 마찬가지로 비활성화 해주는 것이 좋다.

 

jvm 실행 인자 및 메모리 설정

```bash

nohup java -jar /home/user2/app.jar \
-Xms6144m -Xmx6144m  \
-XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps \
-Dspring.profiles.active=$PROFILE \
> /dev/null 2>&1 &

```

  • Java8에서 도입된 `` MetaspaceSize`` 관련 옵션은 안줘도 된다. 
    • 기본이 unlimit.
  • ~Java7 PermGen 영역이었을 때는 GC가 제대로 안돼 memory leak이 발생할 수 있어 Permgen 설정을 넣어줬었는데, MetaSpace가 도입되면서 해당 이슈가 해결됨.

 

자바 클래스 메타데이터?

https://github.com/adinn/fosdem2018/blob/master/FOSDEM2018_Metadata.pdf  

 

 

'DevOps & Server' 카테고리의 다른 글

[tomcat] 톰캣, jvm 실행 인자  (0) 2020.03.05
젠킨스 Jenkins  (0) 2019.05.09
[Gradle] build, jar 배포, IntelliJ 설정  (0) 2019.04.10
vagrant  (0) 2018.11.02
ansible 앤서블 설명  (0) 2018.10.30
docker  (0) 2018.10.27