일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 요리
- javascript
- Gradle
- Web Server
- devops
- JVM
- Git
- laravel
- jsp
- ubuntu
- php
- ReactJS
- Oracle
- jenkins
- AWS
- elasticsearch
- 맛집
- java
- IntelliJ
- Design Patterns
- Spring Batch
- db
- springboot
- tool
- MySQL
- Spring
- Spring Boot
- it
- redis
- linux
- Today
- Total
목록JVM (19)
아무거나
MapStruct 적용[설명]컴파일 시 매핑 코드를 생성하며 Java Bean 간의 매핑을 단순화하는 Java 기반 코드 생성도구입니다. MapStruct를 사용하면 객체 간 데이터 매핑을 위해 boilerplate code를 작성할 필요가 없어진다.MapStruct 에 사용될 Data Class 의 Property 는 var 로 생성해야 한다. 왜냐하면 MapStruct 가 Getter / Setter로 내부 구현체를 생성해서, val 로 선언할 경우 불변이기 때문에 Set 을 할 수 없다.[특징]컴파일 시점에 코드를 생성하여 런타임에서 안정성을 보장다른 매핑 라이브러리보다 속도가 빠름반복되는 객체 매핑에서 발생할 수 있는 오류를 줄일 수 있으며, 구현 코드를 자동으로 만들어주기 때문에 사용이 쉬움An..
DynamoDB 적용의존성 추가(build.gradle.kts)...dependencies { ... // AWS SDK implementation("software.amazon.awssdk:dynamodb-enhanced") implementation(platform("software.amazon.awssdk:bom:2.20.56"))...Entity Class 생성[SampleTable.kt]import com.bkjeon.base.feature.constants.DdbIndexConstimport org.springframework.format.annotation.DateTimeFormatimport software.amazon.awssdk.enhanced.dynamodb.mapper.annota..
원인 원인은 Redis 의 Packet Loss 가 발생하였고 해당 애플리케이션의 전체 Pod 에서 OOM 이 발생하면서 재시작되는 현상이였고 Pod 의 Heap 메모리 사용량은 여유가 있는 상태였습니다. 왜 이러한 문제가 발생하였는지 알아보겠습니다. 컨테이너에서 OOM 발생 먼저 서버로그를 확인해본 결과 Gzip 압축 적용후에 점진적으로 메모리 사용량이 증가한 내용이 확인되었다. 또한 컨테이너에 OOM Kill 도 발생한 것을 확인할 수 있었다. 그러나 이상한점은 Heap Memory 는 정상적인 수치로 확인되었다. 원인분석 Native Memory 에서 OOM 이 발생하였고, Heap Memory 는 정상 적이라 애플리케이션 코드에 문제가 있다고 판단 하였고 관련하여 상기 언급 되었던 배포 항목중 g..
시작에 앞서 먼저 Java8 부터 삭제되는 영역인 Permanent Generation 부터 알아보자면 Class 혹은 Method Code 가 저장되는 영역이다. 줄여서 PermGen 이라고 하며, Heap 영역에 속한다. PermGen 에는 로드된 클래스의 정보, 정적 변수, 상수 정보 등 변하지 않을 것이라고 어느 정도 보증되는 데이터가 저장된다고 한다. PermGen -> Metaspace 영역으로 변경된 이유 PermGen 은 메모리가 제한되기 때문에 OOM(=OutOfMemoryError) 이 발생하게 된다. 그래서 해당 문제를 해결하기 위해 Native 메모리를 사용하는 Metaspace 로 변경되었으며 Metaspace 영역은 Native 메모리를 이용함으로써 개발자는 영역 확보의 상한을 ..
Heap 모니터링 및 Heap Dump 분석 Heap 모니터링 OracleJDK 에서 제공하는 GUI 모니터링 툴 VisualVM 을 다운 VisualVM 상단에 [Tools] - [Plugin]을 접속하여 VisualGC 플러그인을 다운 플러그인 다운이 끝났다면, 창을 종료하고 좌측 메뉴를 확인 후 프로세스 클릭 Monitor 및 Visual GC 를 통하여 각 원하는 항목들을 모니터링한다. Heap Dump 분석 OOM 을 발생시킬 코드 작성 [TestController.java] package com.example.bkjeon; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotatio..
최근에 JVM 관련 대화를 나누던 도중 메모리 영역에 대한 잘못된 설명을 해버린적이 있다. 반성하는겸 다시 정리하고자 해당 포스팅을 작성하게 된다. Java 메모리(with. JVM) 정의 Stack: 정적 할당된 메모리 영역 boolean, char, short, int, long, float, double.. 등과 같은 데이터 즉, 원시타입의 데이터가 값이랑 같이 Stack 에 할당된다. Heap 영역에서 Object 타입 데이터의 참조값이 Stack 에 할당된다. Stack 의 메모리는 Thread 당 하나씩만 할당된다. 즉, 새로운 Thread 생성시 그 해당 Thread 에 대한 Stack 이 또 새롭게 생성된며 각 Thread 끼리는 Stack 영역을 접근 할 수 없다. 간단한 사용예시 pub..
Garbage Collection 기존글: https://bkjeon1614.tistory.com/249 GC(=Garbage Collection) 불필요한 또는 더이상은 사용하지 않는 객체들을 메모리에서 제거함으로써 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 해준다. JVM Heap 구조 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. // 10,000 건의 NewObject 객체는 Loop 내에서 생성되고, 사용되지만 Loop 밖에서는 더이상 사용할 일이 없어진다. 이런 객체들이 메모리를 계속 점유하고 있다면, 다른 코드를 실행하기 위한 메모리 자원은 지속적으로 줄어들기만 할 것이다. // GC는 이렇게 한번쓰이고 버려지는 객체들 즉, 접근 불가능 상태가 된..
NodeJS vs Vert.x 해당 문서는 NodeJS와 Vert.x에 대한 대략적인 특징 및 성능 비교에 대해 간단명료하게 작성하였다. 해당 내용에 대해 더 자세한 정보를 보고 싶다면 아래 링크에서 확인하자. NodeJS Vert.x NodeJS NodeJS는 Google의 Chrome V8 Javascript 엔진 기반인 고성능의 비동기 IO를 지원하는 네트워크 서버이다. Event - Driven 방식 Async / Non Blocking IO 기반 Single Thread Model (이미지 출처) 동작과정 먼저 V8 엔진 기반으로 동작하며 그 기반으로 Single Thread 기반의 Event Loop (libev) 가 돌면서 요청을 처리하고 시스템 적으로 Non-blocking io를 지원하지..
Garbage Collection 이란 Java Application에서 사용하지 않는 메모리를 자동으로 수거하는 기능을 말한다. Garbage Collection 과정 GC에 대해 알아보기 전에 알아야 할 용어인 "Stop-the-world"를 참고하면서 읽자. Stop-the-world GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. 이것이 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라고 stop-the-world는 발생한다. 즉, GC 튜닝이란 stop-the-world 시간을 줄이는 것이다. Java는 프로그램 코드에서 메모리를 명시적으로 지정하여 해제하지..