일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 플레이 프레임워크
- RabbitMQ
- Kafka
- aws
- Logstash
- Elk
- reactive
- confluent
- schema registry
- Elasticsearch
- scala 2.10
- Spring
- avo
- scala
- statestore
- gradle
- Slick
- spring-kafka
- 카프카
- kafka interactive query
- 한빛미디어
- coursera
- spring-batch
- spring-cloud-stream
- kafkastream
- enablekafkastreams
- kafka streams
- kafkastreams
- springboot
- play framework
- Today
- Total
b
tomcat 다시 보기 본문
로그
https://tomcat.apache.org/tomcat-8.0-doc/logging.html
– Apache Commons Logging에서 포킹되어 개발된 tomcat-juli를 사용한다 (위치는 /bin에 존재한다)
– 기본 로그 설정은 conf/logging.properties
로그포맷
– java.util.logging 을 상속 SimpleFormatter(톰캣7 기본 포맷) , XMLFormatter ..
– OnelineFormatter ; JULI구현체이고 8.0.36의 기본 포맷
VersionLoggerListener
– server.xml 에 Listener 으로 등록이 되어 있다.
– 실행히 여러 환경 정보를 남긴다.
– https://goo.gl/eEyI9k 을 보면 별 내용없다.
Valve
– server.xml <Host>밑에 있고, 로그를 남길 수 있다
– 기본 구현체는 AccessLogValve
– checkExists 로그 기록전에 파일의 존재 유무를 체크. 기본false이므로 운영중 파일을 삭제하면 로그는 생성안됨
https://goo.gl/ynbTVI 을 보면 true로 하면 로깅 할때마다 synchroized로 파일 찾는걸 볼 수 있다.
– directory : 로그 저장하는 디렉토리 기본은 logs
– prefix : 기본 localhost_access_log, suffix : txt
그 외 Apr
– AprLifecycleListener :Apr이 사용가능한지 안한지 체크한다.
없으면 “The APR based Apache Tomcat Native library …” 로그 남는데 보기 싫으면 주석 처리 하면 됨
만약 인식을 한다면 Connector은 APR방식으로 자동 설정된다. ( https://goo.gl/zMSDuR)
운영
– setenv.sh : 각족 환경 변수를 정의하는 파일. catalina.sh가 알아서 호출한다.
(JAVA_OPTS, CATALINA_OPTS, LD_LIBRARY_PATH 등..)
– kill 명령은 프로세스에 여러 시그널을 보내는 명령어로 진화했다.예를 들어 3은 SIGQUIT고, Thread덤프를 위한 시글이다.
SIGKILL 9 은 SIGTERM에 비해 덜 안전하지만 빠르게 중지한다. ( 시그널은 man kill로 확인하자 )
– 덤프를 떳을때
tid : Thread의 메모리 address, nid: Native Thread Id
NEW : Thread를 생성했지만 아직 시작하지 않은 상태
RUNNABLE : 실행중
BLOCKED : 다른 Thread가 소유하고 있는 Monitor를 소유하기 위해 대기 중인 상태
WAITING : Object.wait(), Thread.join() 등의 메소드에 의해서 대기중인 상태
TIMED_WATING : WAITING처럼 대기중이지만, ‘최대 대기 시간’이 지정되어 있다.
TERMINATED : 실행을 종료했거나 Exception 이 발생한 상태
– 톰캣의 중단 http://goo.gl/QU2b4a
– 톰캣의 시작 http://goo.gl/TQeJ0p
tomcat port
– 톰캣이 사용하는 포트는 http, https, ajp, Shutdown 총 4개이다.
(사용안한다면 https, ajp, Shutdown은 각각 제외 할 수 있다)
– netstat -an | grep 8080 : 이 포트가 사용중인지 확인하는 명령
– 톰캣은 기본설정은 http/8080, shutdown/8005, ajp/8009 이고 https/8443은 주석처리(사용안함) 이다.
– 0 ~ 1023 포트는 예약 포트라 root가 아닌 유저로는 사용 불가 ( https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#cite_ref-2 )
tomcat Connector
– Shutdown을 제외한 https, http, ajp는 connector에 의해 관리된다.
– connector의 옵션들에 대한 설명 https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
– allowTrace : 디폴트false, 처리는 http://goo.gl/gk81DR
– enableLookups : req.getRemoteHost()는 DNS lookup을 통해 client 이름을 리턴하는데 disable이면 이 과정을 생략. 그렇게 되면 getRemoteHost, getRemoteAddr의 결과가 동일하게 IP로 나옴 http://goo.gl/nGGtKE
– maxPostSize : POST 최대 컨텐츠 크기 디폴트 2*1024^2(2MB), -1로 설정하면 무제한
– maxThreads : 최대 생성 Thread수 디폴트 200 http://goo.gl/2jJOIr 에서 ThreadPoolExecutor를 생성하는걸 확인 가능
– acceptCount : Thread Pool이 꽉 찬 경우에 queue에 대기하는데, 이 queue의 최대 수 설정
(즉 이게 크다면 많이 담을 수는 있지만 응답시간은 느리겠지?)
– maxConnections : 동시처리 가능한 Connection 수로 Connector구현에 따라 다르다.
BIO는 maxThreads값을 따른다. NIO는 10000 http://goo.gl/tuoS07
– URIEncoding : URI기본 인코딩으로 tomcat7은 ISO-8859-1, tomcat8은 UTF-8이다 (하지만 servelt 3.1표준은 ISO-8859-1이니 이건 참고만 하자)
tomcat protocol
– 톰캣8 에서는 Http11Protocol(blocking java connector)가 사라지고 nio가 기본이 되었네.
– tomcat7 bio : http://goo.gl/dNVbht , tomcat7 nio : http://goo.gl/CJB5vu
– 톰캣8에는 http-nio2를 prefix name으로 가지는 Http11Nio2가 생김 http://goo.gl/0E1JLP
http connector 의 속성
– maxKeepAliveRequests : -1은 무제한 , 1은 비 활성화
– keepAliveTimeout : 디폴트 connectionTimeout(20초) 이고 -1은 무제한 대기.
– disableKeepAlivePercentage : Thread가 maxThread대비 이 설정 퍼센트를 넘어갈때 keep-alive를 사용안함
– server : 응답 헤더의 server 속성에 노출 할 값 (기본은 Apache-Coyote…)
server.xml
- 1. Engine Namenode
– defaultHost 속성 : Engine 하위의 Host 중에 하나이며, 어떤 Host도 처리하지 않는 요청을 처리한다.
– 만약 2개 이상의 Host가 있다면 반드시 하나는 Engine의 defaultHost로 지정되어야한다. - 2. Host
– 기본 구현은 https://goo.gl/5v7Jql (StandardHost.java)이며, 가상 호스트 기능을 제공한다.
– appBase는 Host의 애플리케이션 디렉토리(디폴트 webapps)
– xmlBase는 ContextXml(descript) 디렉토리. 기본은 Bconf/<Engine>/<Host> 디렉토리
– autoDeploy : appBase, xmlBase내의 변경 사항을 주기적으로 확인하는 옵션
– unpackWARs : WAR파일을 풀어서 사용할 지 여부
– workDir : <host> 애플리케이션이 사용하는 Scratch 디렉토리를 설정
– Scratch : JSP컴파일 결과 생성되는 java, class 파일등을 저장한다. 위치는 work/<Engine>/<Host>