Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring Security
- 개인프로젝트
- 데이터베이스
- MYSQL
- 쇼트유알엘
- 스파르타코딩클럽
- 프로그래머스
- JavaScript
- JWT
- 생성자 주입
- Kafka
- 항해99
- visualvm
- CentOS
- 시큐리티
- WEB SOCKET
- 스프링의 정석
- 남궁성과 끝까지 간다
- Spring
- 카프카
- docker
- 웹개발
- AWS
- 스웨거
- @jsonproperty
- 패스트캠퍼스
- java
- emqx
- EC2
- DB
Archives
- Today
- Total
Nellie's Blog
[Java] OOM Error (OutOfMemoryError) 유발해보고 모니터링 분석하기 (feat. VisualVM) 본문
Back-end/java
[Java] OOM Error (OutOfMemoryError) 유발해보고 모니터링 분석하기 (feat. VisualVM)
Nellie Kim 2024. 12. 14. 18:52728x90
실무에서 자주 마주치는 OOM 에러 모니터링 상태를 이해하고 메모리 누수, GC 문제가 일어나지 않도록 하기 위해 글을 작성해보았다.
일부러 객체를 계속 할당하여 Heap 메모리를 과도하게 사용하게 하여 OOM 에러를 내보며 모니터링을 해보겠다.
Cat 클래스
계속 할당될 클래스다.
package com.example.demo;
/**
OOM 에러 유발 코드
*/
public class Cat {
private int age;
public Cat(int age) {
this.age = age;
}
}
메인 클래스
계속 Cat 클래스를 할당해준다.
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class DemoApplication {
public static List<Cat> list= new ArrayList<>();
public static void main(String[] args) {
while (true) {
final Cat cat = new Cat(new Random().nextInt(10));
System.out.println("Cat 생성! : " + cat);
list.add(cat);
}
}
}
VisualVM으로 모니터링
VisualVM을 사용해서 모니터링한다. 우측 상단의 그래프에 주목해본다. 저렇게 쌓이기만 하고 다시 내려오지 못한다.
GC가 청소를 못하고 저렇게 계속 메모리가 쌓인다.
GC 모니터링도 확인해보자.
Old Gen 이 계속 쌓임. 7.8G 중에 6.5까지 쌓이고 OOM을 내뿜으며 죽었다.
장렬히 전사함...
그래프는 위와 같이 나타난다. 그래프 모양을 잘 알아두자!
실무에서 자주 마주치는 OOM 에러 모니터링 상태를 이해하고 저렇게 메모리 누수가 생기지 않도록 주의하자!
출처 : 자바 잘 읽는 법 - 자바 코드를 이해하고, 디버깅하고, 최적화하는 요령 (Ch 6)
'Back-end > java' 카테고리의 다른 글
[Java] 동시성 이슈를 유발해보고 해결하기 (feat. VisualVM, synchronized) (0) | 2024.12.14 |
---|---|
스트림의 중간연산과 최종연산 목록 표 (0) | 2024.01.01 |
@RequestBody 호출 시 일어나는 일을 간단히 알아보기 (feat. MessageConverter, ObjectMapper) (1) | 2023.12.06 |
AOP를 사용하여 에러 로그 찍기 (0) | 2023.09.26 |
로컬 디스크에 자바 로깅 기록하기 (spring.log) (0) | 2023.09.26 |