회사에서 업무 중 OOM이 발생하며 트러블 슈팅을 하면서 배웠던 내용들을 공유드릴려고 합니다. OOM이란? out of memory의 앞글자에서 따온 말로 heap 영역에 인스턴스나 더미 데이터들이 정해놓은 heap 크기보다 커졌을 때 보통 발생합니다. 또는 스레드 스택 메모리나 메타 스페이스 등에 데이터가 꽉차더라도 문제가 발생할 수 있습니다. 더 이상 인스턴스에게 새로운 메모리 공간을 할당할 수 없기 때문에 서버는 에러를 내고 서버를 죽입니다. 다음은 OOM이 발생하는 코드를 만들어봤습니다. 이 코드에선 계속해서 ArrayList에 데이터를 append하여 추가하다가 어느 순간 메모리 공간이 부족해지면 에러가 발생하여 프로그램이 동작을 멈출 것입니다. fun main() { val list = mut..
GC는 안쓰는 인스턴스를 처리하기 전에 반드시 stop the world를 하고 이 순간 모든 애플리케이션 동작이 멈추고 GC는 빠르게 불필요한 인스턴스 메모리를 제거합니다. 실제로 회사에서 인터셉터에서 계속 호출되는 똑같은 형태의 객체가 존재하여 플라이웨이트 패턴을 이용하여 자주 참조되는 인스턴스를 static으로 선언하여 GC 동작이 자주 되는 코드를 개선한 경험이 있었는데요. GC가 자주 호출 되면 그 만큼 stop the world가 자주 발생하여 사용자 입장에서 느껴질 정도로 애플리케이션 동작이 지연될 수 있다고 한 글을 읽어 이러한 개선을 했던 것입니다. (메모리 측면도 물론 고려하여) 그렇다면 stop the world가 길어질 수록 성능이 떨어지기 때문에 GC 튜닝의 최종 숙제는 결국 st..
- Total
- Today
- Yesterday
- 코드
- 코딩
- CS
- 게시판
- 개발자
- swarm
- 인터뷰
- 면접준비
- java
- 취준
- thread
- 동시성
- Kotlin
- 자바
- 개발
- JPA
- DevOps
- Redis
- Spring
- 면접
- DB
- IT
- 백엔드
- MySQL
- 취업준비
- 면접 준비
- 프로그래밍
- docker
- 프로젝트
- 취업
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |