WEB 로그 종류

    • Access 로그 : WEB 서버에 대한 요청 로그, HTTP 상태 코드 (200, 4XX, 5XX 등) 등 확인 가능
    • Error 로그 : WEB 서버에서 발생한 모든 중요한 로그 (서버 구성 오류, 클라이언트 요청 오류, 내부 서버 오류 등)

1) Access 로그

## 예시
1.2.3.4 - - [21/May/2024:09:01:34 +0900] "GET /favicon.ico HTTP/1.1" 404 268
LogFormat "%h %l %u %t \"%r\" %>s %b"

 

 
  • 1.2.3.4 : 클라이언트의 IP 주소
  • -: 원격 사용자 이름. "-"는 웹 서버가 사용자 이름을 결정하지 못했음을 나타냅니다. 웹 서버가 RFC 1413에 따라 원격 사용자 이름을 확인하도록 설정된 경우에만 사용 가능
  • -: 인증된 사용자 이름."-"는 사용자가 인증되지 않았음을 나타냅니다. 웹 서버가 HTTP 인증을 사용하여 사용자를 인증하도록 설정된 경우에만 사용 가능
  • [21/May/2024:09:01:34 +0900]: 요청이 발생한 시간. 이 형식은 "[day/month/year:hour:minute:second timezone]"
  • "GET /favicon.ico HTTP/1.1": 요청 라인. "GET"은 HTTP 메소드, "/favicon.ico"는 요청된 리소스의 URI, "HTTP/1.1"은 사용된 HTTP 프로토콜의 버전
  • 404: 서버가 클라이언트에게 반환한 HTTP 상태 코드 404는 "Not Found"를 의미하며, 요청된 리소스를 서버에서 찾을 수 없음을 나타냄
  • 268: 서버가 클라이언트에게 보낸 응답의 바이트 크기. 서버는 268바이트의 데이터를 클라이언트에게 보냈으며, HTTP 헤더를 포함하지 않고 본문만 포함

추가 설정

  • %{X-Forwarded-For}i: 클라이언트의 원래 IP 주소를 로그에 기록. 바로 앞 단의 IP 뿐만 아니라 최초의 클라이언트 IP부터 로그에 남길 수 있는 설정
  • %D: 요청 응답 시간(마이크로초)

2) Error 로그

  1. 기동
    [Fri Sep 10 10:41:21.495400 2021][mpm_prefork:notice][pid 1234]AH00163: Apache/2.4.41 (Unix) configured -- resuming normal operations
    [Fri Sep 10 10:41:21.495472 2021][core:notice][pid 1234]AH00094: Command line: '/usr/sbin/httpd'
    → 기동 되었을 때 찍히는 로그

  2. 중지
    [Fri Sep 10 11:41:21.495400 2021][mpm_prefork:notice][pid 1234]AH00169: caught SIGTERM, shutting down
    → 중지 되었을 때 찍히는 로그

  3. WAS 연결 실패
    [Fri Sep 10 12:41:21.495400 2021][proxy:error][pid 1234](111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:8080 (localhost) failed
    [Fri Sep 10 12:41:21.495400 2021][proxy_http:error][pid 1234][client 192.168.1.1:56247]AH01114: HTTP: failed to make connection to backend: localhost
    → 백엔드에 연결된 WAS 상태 점검 필요

 

 

 

'리눅스' 카테고리의 다른 글

JVM 대표 옵션  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23

WAS 인스턴스 기동시 실행환경 설정(JVM Memoery, GC)와 애플리케이션에 필요한 JAVA 옵션 등을 관리할 수 있습니다.,


 

항목 설명 예시
JVM
Memory
Options -
Memory


 
WAS가 VM 에서 메모리를 얼마나 쓸지 지정하는 HeapSize로 일반적으로 2~4G 설정
운영 서버 기준 80% 이하로 CPU/MEM 사용률 유지
(주의) 현재 힙이 1기가인데  최대 메모리 사용량이 2기가니까 heap도 2기가로 늘려야지 => X
perm이나 thread  여러 요소가 있어서 실제 사용량은 2G 보다 많을  있으므로 고려
또한 HeapSize 의 크기가 지나치게 크면 분석이 어렵고, GC도 효율적으로 동작하기 어려움으로
application 의 성능에 영향을 끼치니 적절한 설정 필요
-Xms2048m -Xmx2048m
Meta(Perm) 영역의 크기와 GC 알고리즘 방식을 설정하는 부분
metaspace 128 두고 max metaspace 256으로 하면 max로 늘어날 때가 오히려 부하를 일으킬 수 있어 min=max 설정하기도 함
마찬가지로 지나치게 크게 설정하면 불필요하게 메모리를 더 많이 사용하고, gc에 시간이 걸리기 때문에 좋지 않음
-XX:MaxMetaspaceSize=256m
JVM
Memory
Options -
GC:
GC 설정 
위 예시에서는 병렬 gc를 사용해서 JVM이 GC를 완료하기 위해 필요한 시간을 줄이고 있고, NEW 영역과 OLD 영역에 각각 설정. (다양한 방법이 있음. G1GC, ZGC...) -verbose:gc -Xloggc:${LOG_HOME}/gclog/${SERVICE_NAME}-${DATE}.log
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:-UseAdaptiveSizePolicy
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+ExplicitGCInvokesConcurrent
JVM
Memory
Options -
HeapDump
OOM (OutOfMemory) 가 발생했을 때, 어떤 동작을 하고 어디에 로그를 남길지 JVM 옵션으로 지정
실제 OOM 이 발생한다고 바로 재기동을 진행하지는 않고, 서비스가 정상적인지 확인하고 Thread Dump 등을 생성해두면 추후 분석에 활용 할 수 있음 (HeapDump 생성은 이미 이슈가 있던 서버에 또 다른 부하를 유발하게 됨)
실제 서비스에서는 OOM 발생 이후에도 특이사항이 없어서 재기동을 진행하지 않고 운영하는 경우도 있기도 함.
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${LOG_HOME}%\hdump
-XX:OnOutOfMemoryError=${LOG_HOME}%\bin\oom.sh
Business
System
Java
Options -
APM
APM 모니터링 설정  
Business
System
CLASSPATH -
DataSource
DB Driver 정보
ex. MariaDB
CLASSPATH="${CLASSPATH}${CATALINA_HOME}/lib/datasource/mariadb-java-client-1.3.6.jar"
export CLASSPATH
LIBRARY_
PATH
LIBRARY_PATH 정보 LD_LIBRARY_PATH=${CATALINA_HOME}/lib
expert LD_LIBRARY_PATH

'리눅스' 카테고리의 다른 글

WEB 로그 종류  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
OutOfMemoeryError 원인 해결 방법
GC overhead limit exceeded
  • Java 프로세스의 98% 이상의 시간을 GC 하는데 사용하고, 2% 이하의 Heap 밖에 회복하지 못하며, 이러한 동작이 5회 이상 반복됨.
  • Heapsize 를 증설함. (Performance 를 항상 고려해야한다)
  • -XX:-UseGCOverheadLimit 옵션을 삭제함.
  • Application의 Memory Leak 을 고침.
java heap space
  • Heap이 가득차거나 공간에 비해 object 가 과도하여 더 이상 Object 를 할당할 수 없음
  • Traffic 증가: Traffic 이 증가하면, Memory 사용량도 증가하여 Memory 가 부족해질 수 있음. 
  • JAVA application 이 Object 를 적절하게 release 하지 못함. object 에 계속 reach 하고 있어서 애플리케이션이 의도하지 않게 객체에 대한 참조를 유지하여 적절하게 GC가 안됨. :
  • JAVA application 이 finalizer를 과도하게 사용함(자바 9부턴 deprecated 되었고, Cleaner를 대안으로 지정). 이는 메모리 누수를 유발하거나 애플리케이션의 성능을 저하시킬 수 있음.
  • Heapsize 를 증설함. (Performance 를 항상 고려해야한다)
  • Application 의 Memory Leak 을 고침.
    : 애플리케이션이 객체에 대한 참조를 유지하면, 가비지 컬렉션(GC)이 해당 객체를 정리하지 못하고 메모리에 계속 남아 메모리 누수로 이어질 수 있다.

Kill process or
sacrifice child
  • VM 자체에 메모리가 모자라서 WAS를 실행할 수 없음. 
  • VM 메모리를 증설하거나 정리함
Metaspace
  • Metasace 영역 부족 (java8 부터 perm → meta 로 변경되고 동작이 달라짐)
  • MetaSpace 영역을 증설함
  • Max 한계를 지정하지 않고, 더 유연하게 JVM을 사용하도록함
  • 전체 VM의 Memory를 증설함 
  • Application Debuging
Permgen space
  • Pergem 영역(클래스의 이름, 필드, 메서드 / 클래스와 관련된 객체 배열 및 타입 배열 /
     Just In Time 컴파일러 최적화) 부족 
  • Pergem 영역을 증설함
  • JVM을 재시작함
  • Application 의 class loader 방식을 디버깅함 
reason stack_trace_with_native_method
  • Native method encountered allocation failure
  • a stack trace is printed in which the top frame is a native method
  • OS 범위에서의 Troubleshooting 이 필요함 
Requested array
size exceeds VM
limit
  • Application 이 heap size 보다 큰 Array 를 메모리에 할당하려고 시도함.
  • Heap size 를 증설함
  • 큰 array 를 할당하려는 application 버그를 고침 
Unable to create
new native thread
  • 새로운 Thread 를 만들기에 Memory 에 충분한 공간이 없음.
  • VM 메모리를 증설하거나 정리함
  • JAVA HeapSize 를 줄임.
  • OS 차원에서 더 많은 Thread 를 실행할 수 있도록 limit 을 증설함 (ulimit -amax user processes)
  • Thread stack size(-Xss) 를 줄임.

'리눅스' 카테고리의 다른 글

WEB 로그 종류  (0) 2024.09.23
JVM 대표 옵션  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
로그 파일 형식로그 정보로깅 설정 / 로그 경로 변경

 

로그 파일 형식 로그 정보 로길 설정 / 로그 경로 변경
catalina.out 리눅스에서 톰캣을 실행할 때 console 출력을 기록한다.
standard output, standard error에 기록된 모든 내용
${catalina.base}/bin/catalina.sh
 
${catalina.base}/conf/logging.properties
 
catalina.YYYY-MM-DD.log 톰캣에서 생기는 로그만을 기록한다.
서버의 기동, 정지, 서비스의 개시, 정지 정보
${catalina.base}/conf/logging.properties
 

host-manager.YYYY-MM-DD.log Tomcat Host Manager Web app 로그 (가상호스트매니저)
${catalina.base}/conf/logging.properties
 
manager.YYYY-MM-DD.log Tomcat Manager Web App 로그 (웹콘솔)
${catalina.base}/conf/logging.properties
 
localhost.YYYY-MM-DD.log host( VirtualHost 같은) 한정한 로그
${catalina.base}/conf/logging.properties
 
localhost_access_log.YYYY-MM-DD.txt 톰캣에 액세스한 기록한다.
어느 host에서 언제, 어떤 방식으로 요청했는지 기록


${catalina.base}/conf/server.xml
 

 

logging.properties 

  • level 은 다음과 같이 ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE를 지원하며 오른쪽으로 갈수록 로그량이 적다.
  • 기본 값이 FINE

 

Tomcat 로그 설정

  FileHandler 비활성화 FileHandler 활성화
ConsoleHandler 비활성화 로그 메시지가 콘솔에 출력되지 않기 때문에
로그 메시지는 catalina.out에 기록되지 않음
FileHandler 핸들러가 로그 파일(catalina.log)에 로그를 기록하도록 설정되어 있으면
로그 메시지는 해당 로그는 (catalina.log) 파일에 기록됨
ConsoleHandler 활성화

로그 메시지가 콘솔에 출력되고
이 출력은 catalina.out에 기록됨
FileHandler 핸들러가 로그 파일(catalina.log)에 로그를 기록하도록 설정되어 있으면
로그 메시지는 해당 로그는 (catalina.log) 파일에 기록됨

단, 시스템의 콘솔 출력을 catalina.out 파일로 리디렉션 되도록 설정되어 있어야 함 (catalina.sh 또는 startup.sh 설정)

'리눅스' 카테고리의 다른 글

JVM 대표 옵션  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29

WAS 로그 종류 

    • catalina.out 로그 : 어플리케이션에서 설정한 로그 기록(WAS 기동/중지, DB 쿼리 등)
    • Access 로그 : WAS 서버에 대한 요청 로그, 서버가 클라이언트의 요청에 의해 반환한 HTTP 상태 코드 (200, 4XX, 5XX 등) 등 확인 가능
    • GC 로그 : GC 이벤트가 발생한 로그 기록 확인 가능

 

1) catalina.out 로그


  1. 기동
     
    01-Oct-2021 10:00:00.123 INFO [main]org.apache.catalina.startup.Catalina.start Server startup in [1234]milliseconds
    → 기동 되었을 때 찍히는 로그. 해당 로그가 찍히더라도 비정상으로 서비스가 올라왔을 수 있으니 서비스 확인은 필수

  2. 중지
    01-Oct-2021 10:30:00.456 INFO [main]org.apache.coyote.http11.Http11NioProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
    01-Oct-2021 10:30:00.789 INFO [main]org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
    01-Oct-2021 10:30:01.000 INFO [main]org.apache.coyote.http11.Http11NioProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
    → 중지 되었을 때 찍히는 로그

  3. OutOfMemoryError(OOME)
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
        at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
        at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
        at java.base/java.lang.StringBuilder.append(StringBuilder.java:174)
        at com.example.MyApp.processData(MyApp.java:45)
    → OOME가 발생 되었을 때 찍히는 로그
    → 오류가 발생한 코드의 위치와 스택이 로그에 남음
    → 서비스 확인이 우선적으로 필요하며 Heap Memory 조정, 로직 호출 방식 수정 등으로 추후 조치 가능

  4. 기타
    ## 예외 로그
    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
        at com.example.MyApp.processData(MyApp.java:34)
     
    ## 경로 로그
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.example.Internals (file:/path/to/app.jar) to method java.base/jdk.internal.misc.Unsafe.allocateMemory(long)
    WARNING: Please consider reporting this to the maintainers of com.example.Internals
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
     
    ##보안 로그
    SECURITY ALERT: Unauthorized access attempt detected. User: unknown, IP: 192.168.1.100
    SECURITY: Failed login attempt for username 'admin' from IP 192.168.1.100
    SECURITY: Password change requested for user JohnDoe
    → 로그 레벨에 따라 찍히는 로그가 다름.

 

 

2) Access 로그


## 예시
1.1.1.1 - - [21/May/2024:00:00:40 +0900] "GET / HTTP/1.1" 200 201 0
pattern="%h %l %u %t "%r" %s %b %D"

 

 
  • 1.1.1.1 : 클라이언트의 IP 주소
  • -: 원격 사용자 이름. "-"는 웹 서버가 사용자 이름을 결정하지 못했음을 나타냅니다. 웹 서버가 RFC 1413에 따라 원격 사용자 이름을 확인하도록 설정된 경우에만 사용 가능
  • -: 인증된 사용자 이름."-"는 사용자가 인증되지 않았음을 나타냅니다. 웹 서버가 HTTP 인증을 사용하여 사용자를 인증하도록 설정된 경우에만 사용 가능
  • [21/May/2024:00:00:40 +0900]: 요청이 발생한 시간. 이 형식은 "[day/month/year:hour:minute:second timezone]"
  • "GET / HTTP/1.1": 요청 라인. "GET"은 HTTP 메소드, "/"는 요청된 리소스의 URI, "HTTP/1.1"은 사용된 HTTP 프로토콜의 버전
  • 200: 서버가 클라이언트에게 반환한 HTTP 상태 코드 200은 정상 응답하였음을 의미
  • 201: 서버가 클라이언트에게 보낸 응답의 바이트 크기. 서버는 201바이트의 데이터를 클라이언트에게 보냈으며, HTTP 헤더를 포함하지 않고 본문만 포함
  • 0: 요청 응답 시간(밀리초)

 

3) GC 로그


## GC 예시

2021-10-28T13:23:45.123+0000: [GC (Allocation Failure) [PSYoungGen: 512K->64K(1024K)]512K->72K(2048K), 0.0016754 secs][Times: user=0.00 sys=0.00, real=0.00 secs]
 
  • 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
  • [GC (Allocation Failure)]: 가비지 컬렉션이 발생한 이유. 여기서는 'Allocation Failure'로, 새로운 객체를 할당하기 위한 공간이 충분하지 않아 GC가 트리거되었음을 의미
  • [PSYoungGen: 512K->64K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • 512K->72K(2048K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '2048K'는 전체 힙 크기
  • 0.0016754 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초).
  • [Times: user=0.00 sys=0.00, real=0.00 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량

## Full GC 예시

2021-10-28T13:23:45.123+0000: [Full GC (Metadata GC Threshold) [PSYoungGen: 512K->0K(1024K)][ParOldGen: 1024K->788K(2048K)]1536K->788K(3072K), [Metaspace: 2703K->2697K(1056768K)], 0.0323945 secs][Times: user=0.05 sys=0.00, real=0.03 secs]
 
  • 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
  • [Full GC (Metadata GC Threshold)]: Full GC가 발생한 이유. 'Metadata GC Threshold'는 메타스페이스가 일정 임계값에 도달하여 Full GC가 트리거되었음을 의미
  • [PSYoungGen: 512K->0K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • [ParOldGen: 1024K->788K(2048K)]: Old 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • 1536K->788K(3072K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '3072K'는 전체 힙 크기
  • [Metaspace: 2703K->2697K(1056768K)]: 메타스페이스의 사용량과 총 크기. 메타스페이스는 클래스 메타데이터를 저장하는 공간으로, PermGen의 대체(Java 1.7은 Perm, Java 1.8 이상은 Metaspace)
  • 0.0323945 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초)
  • [Times: user=0.05 sys=0.00, real=0.03 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량

'리눅스' 카테고리의 다른 글

OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(15)  (0) 2024.05.29

server.xml

shutdown 포트
비활성화
<Server port="8005" shutdown="notuse">
*규칙을 적용한 기본 shutdown port + 1000
shutdown port 미사용, shutdown 예약어 변경


Service Connector *http 
<Connector URIEncoding="UTF-8" bindOnInit="false" connectionTimeout="20000" executor="httpThreadPool" maxThreads="256" minSpareThreads="10" port="${port.http}" protocol="HTTP/1.1" redirectPort="${port.https}" server="Server"/>
* 각 커넥터 포트는 사용여부에 따라 유동적으로 설정 (https는 기본적으로 비활성화)
* connector 태그의 포트 변경 -> env.sh 로 분리.
8080 => ${port.http}
8009 => ${port.ajp}
8443 => ${port.https}
*https
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
 
* ajp connector 설정 변경
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="${port.ajp}" protocol="AJP/1.3" redirectPort="${port.https}" URIEncoding="UTF-8" maxPostSize="-1
        minSpareThreads="32" maxThreads="256" connectionTimeout="20000" acceptCount="10" xpoweredBy="false" secretRequired="false" address="0.0.0.0"/>
* address="0.0.0.0"
 - 8.5.51부터 AJP 커넥터의 기본 수신 주소 가 모든 주소가 아닌 루프백 주소로 변경
* secretRequired="false"
 - 8.5.51부터 secretRequired 속성이 AJP 커넥터에 추가
 - 기본값(default)이 true이므로 미설정시 기동 불가
Engine * jvmRoute 추가 (Engine 태그에 jvmRoute="{workers.properties 에서 해당하는 것과 동일하게}" 속성 추가)
 - 1번 WAS의 경우 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TEST_01_01">
 - 2번 WAS의 경우 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TEST_02_01">
 
Host * 어플리케이션 추가
      <Host name="localhost" unpackWARs="true" autoDeploy="false">
          <Context path="/" docBase="/sorc001/appadm/applications/mainWebApp.war" reloadable="false" privileged="true"/>
~~~
      </Host>

혹은 Catalina / localhost / 안의 localhost.xml 
<?xml version="1.0" encoding="UTF-8"?><Context docBase="D:\sorc001\xiper" path="/xmms" reloadable="false"/>
 
Context * AccessLog Duration 추가 : Host 태그 내
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".log"
               pattern="%h %l %u %t &quot;%r&quot; %s %b %D %r %{Referer}i %{User-Agent}i" />
* AccessLogValve (pattern)
%h - 원격 호스트 이름(또는 enableLookups커넥터가 false인 경우 IP 주소)
%l - identd의 원격 논리적 사용자 이름(항상 '-' 반환)
%u - 인증된 원격 사용자(있는 경우), 그렇지 않으면 '-'
%t - 공통 로그 형식의 날짜 및 시간
%s - 응답의 HTTP 상태 코드
%b - 보낸 바이트(HTTP 헤더 제외, 0인 경우 '-')
%D - 요청을 처리하는 데 걸린 시간(밀리초)
%T - 요청을 처리하는 데 걸린 시간(초)
%r - 요청의 첫 번째 줄(메서드 및 요청 URI)
* StuckThread Valve 설정 : Host 태그 하위에 Valve 태그 추가
         <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve"
                       threshold="300" interruptThreadThreshold="600"/>
* StuckThreadDetectionValve
 - threshold : StuckThread 조건 감지 시간. 설정된 시간 이상으로 Thread가 요청을 처리하고 있으면 Stuck Thread로 판단하여 로그에 기록을 남긴다. 0으로 설정시 비활성화 (default값 600초)
 - interruptThreadThreshold : Stuck Thread가 발생 했을 때, interrupt를 수행할 기준 시간이다. 기본 설정은 -1로 되어있어 사용되지 않고 있다. 해당 설정을 사용하려면 Threshold보다 크거나 같게 설정해야 한다.

'리눅스' 카테고리의 다른 글

Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(15)  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(14)  (0) 2024.05.29

tomcat (WAS) 설정

 

Apache (WEB) 설정

  • httpd 패키지 설치 후 아파치를 시작
  • 80 포트, http, https 방화벽까지 열어준다.

  • Apache 화면 열리는 것 확인

 

WEB, WAS 연동

1) WEB 설정

 

  • 명령어를 모두 실행하면 mod_jk.so라는 파 일이 생긴다.
  • ./buildconf.sh 명령어를 실행해 준 후 필요한 패키지를 설치해 준다.
  • chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so
  • mod_jk 연동하는 과정에서 보안 관련해 오류 발생을 방지하기 위해 미리 권한을 부여

  • 마지막 줄에 명령어 주석되어 있으면 풀어주고, 없으면 작성해서 추가

 

더보기

LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
    JkWorkersFile conf.d/workers.properties
    JkShmFile run/mod_jk.shm
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%y %m %d %H:%M:%S] "
    JkMount /* test
</IfModule>

LoadModule jk_module
modules/mod_jk.so
modules/mod_jk.so 를 실행해서 작업
JkWorkersFile
conf.d/workers.properties
연동설정 파일 이름 및 위치
JkShmFile run/mod_jk.shm shm 파일 이름 및 생성 위치
JkLogFile logs/mod_jk.log log 파일 이름 및 생성 위치
JkLogLevel info log level : info( default )
JkLogStampFormat
"[%y %m %d %H:%M:%S]
날짜
JkMount /* test 모든 활동에 대해 연동 , 'test’ 작업자가 수행

 

 

  • worker.list: 사용할 톰캣 이름 목록 (mod_jk.conf 에 설정한 이름 (test)와 동일하게 설정
  • worker. 톰캣이름 .port: 톰캣의 ajp 포트 번호 기본 값은 8009)
  • worker. 톰캣이름 .host: 톰캣이 위치하고 있는 IP 주소 아파치와 톰캣이 한 서버에 있다면
    localhost)
  • worker. 톰캣이름 .type: 톰캣과 연결할 때 사용할 타입
  • worker. 톰캣이름 .lbfactor: 로드밸런싱할 때 사용함

 

※ 작업 후 apache 재실행

 

 

Tomcat(WAS) 설정

  • server.xml 파일로 이동 후 Connector protocol 설정
  • 후 tomcat 실행

  • 8080 포트와 8009 포트가 작동하는지 확인
  • ESTABLISHED 가 나오면 tomcat에 접속 가능

 

  • 해당 홈페이지가 나오면 성공

 

jstat의 정보를 출력하는 쉘 스크립트


#!/bin/bash

source /home/shell/env.sh

#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

for JavaName in "${JavaNames_gc[@]}"
do

# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

# pid가 없을 경우 1 출력 후 종료
if [ -z "$pid" ]; then
    echo 1
    exit 0
fi

# jstat 정보들을 출력
result=$("$JAVA_WHERE"/jstat -gc "$pid" | tail -n 1 | awk '{print ($3+$4+$6+$8)/($1+$5+$7)*100')
HEAP_MEMORY_USAGE=$(printf "%.0f" "$result")

  • jstat -gc 명령어를 사용하여 Java 프로세스의 GC 통계를 가져옵니다.
  • 이를 통해 힙 메모리 사용량을 계산


GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

  • jstat -gcold 명령어를 사용하여 Java 프로세스의 이전 GC 통계를 가져와 GC 횟수를 계산


echo $pid $JavaName "heap usage : " $HEAP_MEMORY_USAGE "FCCount : " $GC_COUNT

done


더보기

#!/bin/bash

source /home/shell/env.sh

#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

for JavaName in "${JavaNames_gc[@]}"
do

# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

# pid가 없을 경우 1 출력 후 종료
if [ -z "$pid" ]; then
    echo 1
    exit 0
fi

# jstat 정보들을 출력
result=$("$JAVA_WHERE"/jstat -gc "$pid" | tail -n 1 | awk '{print ($3+$4+$6+$8)/($1+$5+$7)*100')
HEAP_MEMORY_USAGE=$(printf "%.0f" "$result")

GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

echo $pid $JavaName "heap usage : " $HEAP_MEMORY_USAGE "FCCount : " $GC_COUNT

done

'리눅스' 카테고리의 다른 글

Tomcat 주요 설정 파일 구성  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(14)  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(13)  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(12)  (0) 2024.05.29

+ Recent posts