![[Java] OOM 발생 시 Heap Dump를 통해 분석해보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp0qO0%2Fbtspg0Hxq0y%2FPJlmn968YHi6e2QGmGkPK0%2Fimg.png)
[Java] OOM 발생 시 Heap Dump를 통해 분석해보기 IntroSpring으로 개발한 웹 애플리케이션을 운영하다 보면, 메모리 누수가 발생하거나 많은 트래픽이 몰리는 현상 또는 구현 상의 버그로 인해 Heap의 사용량이 순간적으로 크게 증가할 수 있습니다.이 경우 GC가 과도하게 일어나면서 애플리케이션의 성능을 저해할 수 있고, 심한 경우에는 OOM(Out Of Memory) 에러가 발생하여 애플리케이션이 다운될 수 있습니다.해당 에러가 발생하면 코드 상으로 어떠한 객체가 원인인지 찾아내기 상당히 어렵기 때문에, 해당 글에서는 OOM이 발생한 시점 Dump를 떠서 분석해보는 것을 목표로 합니다. OutOfMemoryError 발생시키기먼저, OutOfMemoryError(OOM)을 발생시키는 ..
문제 링크 토마토 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 풀이 코드 import java.util.*; public class Main { static class Position { int x; int y; Position(int x, int y) { this.x = x; this.y = y; } } // BFS 탐색을 위한 queue 선언 static Queue queue = new LinkedList(); // 방향벡터 정의 static int[] dx = {1, 0, -1, 0}..
문제 링크 타겟 넘버 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 코드 class Solution { public int solution(int[] numbers, int target) { int answer = dfs(0, 0, numbers, target); return answer; } private int dfs(int depth, int sum, int[] numbers, int target) { if(depth == numbers.length) { if (sum == target) return 1; else return 0; } retu..
문제 링크 유기농 배추 풀이 코드 import java.util.*; public class Main { // 위치클래스 선언 static class Position { int x; int y; Position(int x,int y) { this.x = x; this.y = y; } } // 방향벡터 정의. static int[] dx = {1, 0, -1, 0}; static int[] dy = {0, 1, 0, -1}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); StringBuilder sb = new StringBuilder(); while(t > 0) { int ..
문제 링크 섬의 개수 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 풀이 코드 import java.util.*; public class Main { static class Position { int x; int y; Position(int x, int y) { this.x = x; this.y = y; } } // BFS 탐색을 위한 Queue 정의. static Queue queue = new LinkedList(); // 방향벡터 정의(상, 하, 좌, 우, 대각선) static int[] dx =..
문제 링크 바이러스 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net 풀이 코드(DFS) import java.util.*; public class Main { static int n; static int m; static int[][] graph; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); //정점의 개수 m = sc.nextInt(); //간선의 개수 graph = new int[n+1..
문제 링크 미로 탐색 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 풀이 코드 import java.util.*; public class Main { static class Position { int x; int y; Position(int x, int y) { this.x = x; this.y = y; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt();; int m = sc.nextInt();; int[]..
문제 링크 DFS와 BFS 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 풀이 코드 import java.util.*; public class Main { static int n; static int m; static int[][] graph; static boolean[] visited; /** * 입,출력 */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nex..
문제 링크 한수 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 풀이코드 import java.util.*; public class Main { static int answer; /** * 입,출력 */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); print(solution(n)); } private static int solution(int n) { int answer = 0; ..
문제 링크 피보나치 수 풀이 코드 import java.util.*; public class Main { static int[] fibo; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println(solution(n)); } private static int solution(int n) { fibo = new int[n+1]; int answer = recursive(n); return answer; } private static int recursive(int n) { if(fibo[n] != 0) return fibo[n]; if(n == 0) r..
문제 링크 체스판 다시 칠하기 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이 코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // n 입력받기 int n = sc.nextInt(); // m 입력받기 int m = sc.nextInt(); // board 입력받기 char[][] board = new char[n][m]; for(..
문제 링크 숫자 야구 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 풀이 코드 import java.util.*; public class Main { static class Question { String number; int strike; int ball; Question(String number, int strike, int ball) { this.number = number; this.strike = strike; this.ball = ball; } } /** * 입,출력 */ public static..