개발자

자바 메모리 누수 문제

2024년 11월 21일조회 23

프로젝트를 끝내고 aws 의 ec2 t2.micro 를 이용해서 배포를 했는데 메모리 누수가 심한 것 같습니다 docker 를 이용해서 배포해주고 있는데 heep space 에러가 메인 페이지 를 새로고침 몇번 하다보면 나더라구요 가상 메모리를 사용해서 메모리를 늘려주거나 코드에서 필요없는 변수를 지워주는 등 해봤는데 효과가 미미한것 같아요 본질 적인 문제는 어떤 시선으로 바라봐야 풀 수 있을까요?? 막막하네요 ㅜㅜㅜ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 0

답변이 없을 때 보이는 아이콘

첫 답변을 기다리고 있어요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 11월 21일

자바에서 메모리 누수는 주로 객체가 GC(Garbage Collector)에 의해 회수되지 않아서 발생합니다. 자주 발생하는 메모리 누수 원인을 몇 가지 제시하겠습니다. 1. Static Collections: static으로 선언된 collection은 프로그램이 종료 될 때까지 회수되지 않습니다. 개체를 삽입하고 제거하지 않으면 이들이 계속적으로 메모리에 남게 되어 누수를 일으킬 수 있습니다. 2. Listener/Callback: 이벤트 리스너나 콜백을 등록하고 해제하지 않으면, 이들은 애플리케이션 생명주기 동안 계속 메모리에 남게 되므로 메모리 누수의 원인이 됩니다. 3. Inner Class와 Anonymous Class: 내부 클래스나 익명 클래스는 외부 클래스의 참조를 보유합니다. 이러한 참조가 잘못 관리될 경우, 외부 클래스의 인스턴스가 메모리에서 해제되지 않아 메모리 누수를 일으킬 수 있습니다. 본질적인 문제를 풀기 위해선 다음과 같은 방법들을 사용할 수 있습니다: - **코드 검토:** 코드를 자세히 검토하여 위에서 언급한 순환참조, 안 쓰는 리스너 제거, static 변수/콜렉션 사용 줄이기 등의 이슈가 있는지 찾아보세요. - **프로파일링 도구 사용:** VisualVM, JProfiler, MAT(Memory Analyzer Tool) 등의 툴을 사용하여 Heap dump를 분석하면 어떤 객체가 메모리를 많이 차지하는지, 어디서 GC가 제대로 작동하지 않는지 파악할 수 있습니다. 이런 툴들은 실행 중인 JVM에서 정보를 가져와 시각적으로 분석합니다. - **GC 로그 분석:** `-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps`등의 JVM 옵션을 설정하여 GC 작동 로그를 살펴보세요. 이 로그를 통해 어떤 부분에서 가장 많은 메모리가 소비되는지 파악할 수 있습니다. 기타 세부적인 문제에 대해서는 `FindBugs`, `PMD`, `CheckStyle`과 같은 코드 검사 도구들을 사용해 볼수도 있습니다. 위 방법을 통해 문제 원인을 찾고 해결하는 것이 좋겠습니다. 다시 한번 강조하지만 코드 리뷰와 프로파일링 도구를 활용하는 것이 중요합니다. 기억하세요, "당신이 볼 수 없는 것은 고칠 수 없다"는 말이 있습니다. 그러니 먼저 "어디서 문제가 발생하는지"를 파악하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!