JAVA

    JAVA process의 CPU 사용량 패턴 분석

    특정 JAVA process의 CPU 사용량이 과도하게 높을 때, 해당 원인을 파악하는 방법이다. * CPU가 높은 이유는? => WAS 자체 문제, 사용자가 만든 thread, 잘못된 코딩 방식, 타사 소프트웨어 등 다양한 이유로 발생할 수 있음. 따라서 정확한 문제 발생 원인을 파악하기 어렵기 때문에 아래와 같은 패턴을 통해 수집된 데이터를 활용하여 문제를 해결하는데 도움을 줄 수 있다. * 단계별 수집 방법 1. Top을 실행해서 java process 중 CPU 사용량이 높은 PID를 확인 => 사용량이 많지 않은 weblogic 테스트 서버이지만, 아래를 위해 해당 '207944' PID 선정 => Linux용 JVM은 java thread를 native thread로 구현하였기에 각 threa..

    Java Native Memory Tracking (jcmd 사용)

    특정 Java 어플리케이션의 Native 메모리 사용을 추적하기 위해서는 JAVA 어플리케이션 실행 시 다음과 같은 옵션을 추가해서 기동해줘야 한다. -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics 다음은 해당 Java 어플리케이션의 PID를 얻기 위해 사용할 수 있는 방법이다. [weblogic@localhost jh_domain]$ /usr/java/jdk1.8.0_311/bin/jps -l 4985 sun.tools.jps.Jps 4540 weblogic.Server 다음은 Native memory tracking을 위해 jcmd를 사용하는 방법이다. [weblogic@localhost jh..

    HashMap

    HashMap 이란? JAVA의 클래스 중 하나이며, Map 인터페이스를 구현한 함수이기에 (key,value) 형태로 데이터를 저장하게 된다. Key 값의 HashCode를 index로 array 값을 저장하기에 검색 속도가 매우 빨라지며, Hashing 검색을 통해 대용량 데이터 관리에도 좋은 성능을 보이게 된다. Key 값은 중복이 되지 않고, value 값은 중복이 된다. (참조 : https://hgserver.tistory.com/54) 각각 put(), get() 을 이용하여 데이터를 삽입/추출할 수 있으며, list에 비해 HashMap이 가지는 이점으로는 put() 메소드가 호출될 때 버킷으로 equals를 통해 동일 여부 판단 이후 저장하게 되기에 초기 메모리 낭비가 심하지 않다는 것이..

    java/lang/object

    heap dump를 분석하다 보면 항상 일정량 이상의 java/lang/object가 heap memory를 사용하고 있는 것을 확인할 수 있다. 이 java/lang/object에 대한 설명은 다음과 같다. java/lang/object => Java의 모든 클래스의 기본이 되는 클래스. 클래스 계층에서 가장 상위에 존재한다. 모든 클래스는 이 Object 클래스를 상속받아 구성되며, 그렇기에 따로 import 선언을 하지 않아도 사용이 가능하다. (참조 : http://www.incodom.kr/Java/java.lang.Object) 위 java/lang/object에는 11개의 메서드가 존재하며 예시는 다음과 같다. - clone() : 객체 자신의 복제본 반환 - equals() : 객체 자신과..

    JVM memory 모니터링

    1. 프로세스 JVM 메모리 모니터링 JVM은 각자의 Heap Memory를 가지고 운영하며, 값을 설정할 수 있다. 해당 프로세스를 기동하는 script에 추가적인 JVM option을 설정했다면 다음과 같이 ps -ef 프로세스 체크로 heap memory 설정이 가능하나, 그 외에는 단순하게 process check만으로는 식별이 불가능하다. 그럴 때는 jmap을 사용하여 판별이 가능하다. => ${JAVA_HOME}/jmap -heap [weblogic@localhost bin]$ ./jmap -heap 2631 >> jmap.txt [weblogic@localhost bin]$ cat jmap.txt Attaching to process ID 2631, please wait... Debugger..

    JMX

    JMX란 Java Management Extensions의 약자이다. JDK 1.5부터 지원되는 사양이며, 실행 중인 application 모니터링 및 설정 변경을 지원하는 API이다. 외부에서는 JMX connectors로 MBean 서버에 접근하면 되며, 이외에 JConsole, visualVM 등의 모니터링 도구를 지원받아서 모니터링을 진행할 수도 있다. (참조 : http://okminseok.blogspot.com/2019/07/jmx.html) application의 실행 parameter 설정을 통해 jmx 포트 활성화 및 연동을 할 수 있으며, 대표적인 예시로는 다음과 같다. 예시로 jmx를 활용하여 visual VM에 붙는 실습은 다음을 참고하면 된다. https://billy727.ti..

    request.getHeader의 ip 얻기

    # 환경 - WAS : WebLogic (ip : 192.168.56.242, port : 8002) - WEB : OHS (ip : 192.168.56.109, port : 8080) - WebLogic에서 WebLogic plug in을 false로 설정한 상태. (false인 경우 WEB은 client ip를 불러온다.) # source Header1과 Header2는 같은 값을 가짐 (같은 ip를 불러옴) - WAS 호출 - WAS ~ WEB 호출 ==> 기댓값(WAS는 Router IP, WEB은 Client IP)를 화면에 찍은 것을 확인.

    GC 종류

    GC (Garbage Collector)에 대한 내용은 다음 글 참고. https://billy727.tistory.com/83?category=1062896 JVM memory 구조 JVM이란? => Java Virtual Machine의 약자. JAVA와 OS 사이에서 중개자 역할 및 JAVA가 OS에 구애받지 않고 프로그램 실행시킬 수 있도록 도와주는 역할. Garbage Collector를 사용하여 메모리 관리도 자동으.. billy727.tistory.com # GC가 일어나는 과정 (https://jonny-cho.github.io/java/2021/06/01/garbage-collection/ 참고) 1. 새로운 객체가 Eden 영역에 할당된다. 2. Eden 영역이 꽉 차면 Minor GC..