회사에서 업무 중 OOM이 발생하며 트러블 슈팅을 하면서 배웠던 내용들을 공유드릴려고 합니다. OOM이란? out of memory의 앞글자에서 따온 말로 heap 영역에 인스턴스나 더미 데이터들이 정해놓은 heap 크기보다 커졌을 때 보통 발생합니다. 또는 스레드 스택 메모리나 메타 스페이스 등에 데이터가 꽉차더라도 문제가 발생할 수 있습니다. 더 이상 인스턴스에게 새로운 메모리 공간을 할당할 수 없기 때문에 서버는 에러를 내고 서버를 죽입니다. 다음은 OOM이 발생하는 코드를 만들어봤습니다. 이 코드에선 계속해서 ArrayList에 데이터를 append하여 추가하다가 어느 순간 메모리 공간이 부족해지면 에러가 발생하여 프로그램이 동작을 멈출 것입니다. fun main() { val list = mut..
배경. 배치를 만들던 도중에 Bean으로 등록해놓은 Thread Pool에 Thread가 꽉차서 Queue에 더 이상 Job이 들어갈 수 없다는 예외가 발생했습니다. 예를 들기 위해 테스트 코드를 하나 작성해보겠습니다. class ThreadPoolExecutorTest { @Test fun testThreadPoolQueueCapacity() { val executor = ThreadPoolExecutor( 2, // core pool size 2, // max pool size 0L, // keep alive time TimeUnit.MILLISECONDS, // time unit for keep alive time LinkedBlockingQueue(1) // queue with capacity 1..
배경 https://golf-dev.tistory.com/53 Redis INCR을 이용한 분산환경에서의 동시성 제어하기 문제 상황 회사에서 분산환경에서 하루에 한 번만 요청이 가능한 기능이었지만 한 사람이 3번 이상 요청을 보낸 기록이 있어 원인을 찾아보았습니다. 우선 샘플 코드는 다음과 같습니다. fun save( golf-dev.tistory.com 제 블로그를 많이 읽어보셨다면 익숙한 글 입니다. Redis INCR 동작원리를 이용해서 분산환경에서 Lock을 구현했었는데요. 이 방식이 과연 최선이었는가에 대해서 고민을 해보는 시간을 가져볼 겁니다. 뭐가 문젠데? 요청 프로세스를 다이어그램으로 그려보면 다음과 같습니다. 이미 요청 횟수를 정해놓고 구현했기 때문에 INCR로 두 서버에서 요청수를 co..
개인 프로젝트 도중 사용하게 되서 써본 글입니다. 앞으로 계속 공부를 이어나갈 예정입니다. 부족하지만 잘 부탁드립니다! 코루틴 소개 코루틴은 흔히 백엔드 개발자 사이에서 코틀린에서 제공하는 기능으로 착각하고 있는 분들이 많습니다. 하지만 Javascript, C#, Go 등 이미 여러 언어에서 지원하고 있는 개념이며 새로운 개념, 기술이 아닙니다. 코루틴 소개 전 CallBack 지옥에 대해서 알아보자 콜백 지옥은 함수형 패러다임을 적용한 언어에서 등장하는 형태입니다. 함수에서 최종적인 결과를 도출하기 위해 콜백 함수를 과도하게 호출하면 콜백 지옥이 생기게 되고 이러한 코드는 가독성을 떨어트리고 디버깅을 어렵게 만듭니다. 예를 들어 단순 주문을 하는 로직을 구현한다고 가정해 봅시다. memberRepos..
- Total
- Today
- Yesterday
- 프로그래밍
- Kotlin
- DevOps
- 면접
- 코딩
- 취업준비
- Redis
- 자바
- JPA
- swarm
- 인터뷰
- MySQL
- 코드
- 프로젝트
- 개발자
- IT
- 취준
- 면접준비
- 취업
- 게시판
- DB
- docker
- CS
- 개발
- Spring
- thread
- java
- 동시성
- 면접 준비
- 백엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |