⚡ 개요
요즘 고객사에 점진적으로 솔루션이 나가게 되면서 기능적인 오류 보다도 사용자가 많고, 데이터가 많아짐에 따라 생각지도 못한 부분에서 속도가 느리거나 OOM 이슈가 나오고 있다. 😓
내부적으로 개발 단계에서 생각하지 않고 개발한 부분에 대해서는 개선 작업을 통해서 어느 정도 해결이 된 부분도 있고, 초기 단계에서 구조를 잘못 잡아서 발생하는 부분도 존재하고 있지만 어느 정도 인지를 하고 개선 작업을 하고 있다.
하지만 특정 화면이나 기능이 동작하는 과정에서 여러 서비스를 호출하고, 데이터를 가공하는 과정에서 문제를 찾기란 쉽지가 않다. 내부에서 테스트 코드를 작성해서 호출 과정 및 메모리 사용을 체크 해서 발견이 되면 다행이지만 나오지 않는 경우도 종종 존재한다.
위의 이슈에 따라서 모니터링에 대한 툴에 대해서 고민을 하고 있으며, 기본적으로 자바 진영에서 제공 해주는 부분을 1차적으로 적용해서 보려고 했던 내용을 공유하려고 한다. 이미 해본 사람도 있겠지만 그렇게 자세한 내용은 나오지 않는다..
최근에 datadog에서 무료로 지원을 해줘서 구축하고 모니터링을 했던 경험이 있다. (기능이 엄청 많아서 다 사용해본건 아니다.)
⚡ 구축 및 사용
💡 옵션
// JMX가 로컬 머신에서만 접근 가능하도록 제한할지 여부를 설정
-Dcom.sun.management.jmxremote.local.only=false
// JMX 접속 시 인증을 요구할지 설정하는 옵션
-Dcom.sun.management.jmxremote.authenticate=false
// JMX 연결에서 SSL 암호화를 사용할지 여부를 설정하는 옵션
-Dcom.sun.management.jmxremote.ssl=false
// JMX 연결을 위해 사용할 포트를 지정
-Dcom.sun.management.jmxremote.port=1099
// RMI 통신을 위해 사용할 포트를 지정
-Dcom.sun.management.jmxremote.rmi.port=1099
// RMI 서버 설정
-Djava.rmi.server.hostname=192.168.100.1
VM에 대해서 검색 하면 가장 많이 나오는 옵션에 대해서 정리를 했다. 추가적으로 다른 옵션도 있나 확인해봤지만 현재 필요 없다고 판단을 해서 따로 적지는 않았다. 보통 활성화, 보안, 접근 제어 등 안전성에 대한 옵션이 많기 때문에 실제 운영단계에서 반영을 한다면 확인해야 할거 같다.
실행 방법은 위의 옵션을 JAVA 실행 옵션에 넣어주면 끝이다. 혹시라도 docker를 사용해서 image를 만들어서 사용한다면 아래와 같이 설정 하면 된다.
// 다른 설정은 제외
ENTRYPOINT ["java", "-javaagent:dd-java-test.jar", "-Dcom.sun.management.jmxremote.local.only=false"]
콤마를 기준으로 뒤에 계속해서 붙여주면 된다.
💡 실행
실행을 시킬때는 Remote에서 옵션에서 설정한 hostName으로 접근하면 된다.
여기서 엄청 자세한거를 본다는 생각을 가지면 안 된다. 봐도 어디서 문제가 발생한 지 알 수가 없다. 심지어 Visual GC는 볼 수도 없다. (플러그인이라서 처음에는 없으니까 상단에 Tools -> Plugins에서 다운로드하면 된다.)
뭔가 이상함이 감지가 된다면 Heap Dump를 받아서 분석으로 해야한다. (Intellij 또는 이클립스 툴에서 분석 가능)
내 생각이지만 구축 단계에서 메모리 누수가 발생하는 경우에 덤프를 뜨도록 설정을 해놓는게 좋다고 생각을 한다.
'DevOps' 카테고리의 다른 글
[git] 태그와 릴리즈(Tag & Release) 관리 (0) | 2024.02.23 |
---|---|
Jenkins 에서 SSH Server 등록 및 Spring Boot 서비스 배포 관련 내용 정리 (0) | 2023.05.29 |
Docker + Centos + Spring Boot 구축 가이드 내용 정리 (0) | 2023.05.21 |
nssm으로 jar 파일 window service 등록 하기 (0) | 2023.05.15 |
사용중인 Intellij 플러그인 정리 (0) | 2023.03.12 |