에러메시지
java.lang.OutOfMemoryError: Java heap space
12월 29, 2022 10:48:12 오전 org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet [action] in context with path [/toms] threw exception [Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space] with root cause
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)
현상
LIST<VO> 변수에 몇 십 만 건의 데이터를 담아서
해당 데이터에 따라 JAVA 단에서 데이터 처리 후
하나씩 INSERT
원인
JAVA heap 메모리 용량 부족
해결
결과적으로 저는 1번으로 해결 했습니다.
LIST<VO>에 담는 데이터 양을 대폭 줄여서 데이터를 처리하니 수월하게 INSERT 되었습니다.
만약 굳이 데이터를 많이 담아 처리해야 하는 상황이 아니라면 조금씩 줄여서 처리 해보는 걸 추천 합니다.
그외 나머지 방법은 아래 작성 했습니다.
1. 처리 해야하는 데이터 양 줄이기
2. 이클립스 eclips.ini 수정
3. 톰캣 catalina.bat 수정
4. 이클립스 상 톰캣 agument 수정
2번 이클립스 eclips.ini 수정
2-1 eclips.ini 파일 열기
2-2. 해당 파일 아래 이미지 블록 씌운 부분 중 xms 부터 아래 처럼 수정
이때 자신의 컴퓨터 용량에 맞게 수정 하시면 됩니다.(메모리 옵션 제일 하단 참조)
-Xms4096m
-Xmx6096m
-XX:MaxPermSize=6048m
3번 톰캣 catalina.bat 수정
3-1 tomscat 폴더/bin 안에 catalina.bat 열기
3-2. setlocal 삭제
set "CATALINA_OPTS=-Xms512M -Xmx6048M -XX:PermSize=256M -XX:MaxPermSize=6048M"
위 내용을 입력 합니다.
이때 자신의 컴퓨터 용량에 맞게 수정 하시면 됩니다.
4번 이클립스 상 톰캣 agument 수정
4-1. 이클릅스 내 톰캣 더블클릭
4-2. Open launch configuration 클릭
4-3. Arguments
-XX:MaxPermSize=4048m -Xms516m -Xmx6048m
메모리 수치를 본인의 컴퓨터에 맞게 수정 해주세요.
메모리 옵션
-XX:MaxPermSize=<size> : Permanent Generation의 최대 크기를 지정한다. Permanent Generation의 시작 크기는 PermSize옵션에 의해 지정된다.
많은 수의 Class를 로딩하는 Application은 PermSize와 MaxPermSize옵션을 이용해 Permanent Generation의 크기를 크게 해주는 것이 좋다.
Permanent Generation의 크기가 작을 경우에는 Out of Memory Error가 발생한다.
-Xms<size> : Java Heap의 최초 크기(Start Size)를 지정한다. Java Heap은 -Xms 옵션으로 지정한 크기로 시작하며
최대 -Xmx옵션으로 지정한 크기만큼 커진다.
Xmx<size> : Java Heap의 최eo 크기(Maximum Size)를 지정한다. -Xms 옵션으로 지정한 크기로 시작하며 최대 -Xmx옵션으로 지정한 크기만큼 커진다.
Sun HotSpt JVM 계열에서는 최초 크기와 최대 크기를 동일하게 부여할 것을 권장한다. 크기의 동적인 변경에 의한 오버 헤들를 최소화하기 위해서이다.
<참조사이트>
물고기 개발자의 블로그
웹개발을 하면서 알게된 유용한 상식들을 공유하는 곳입니다.
epthffh.tistory.com
해결 2~4번 출처 : https://lee-mandu.tistory.com/416
이클립스 java.lang.OutOfMemoryError: Java heap space
프로젝트를 진행하면서 에러가 발생하였습니다.아마 유명한 에러일듯 합니다. java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:3664)at java.lang.String.(String.java:207)at java.nio.HeapCharB
lee-mandu.tistory.com
'IT 개발 > 에러' 카테고리의 다른 글
[에러] Neither BindingResult nor plain target object for bean name '...' available as request attribute (0) | 2023.01.31 |
---|---|
[JSTL] javax.servlet.jsp.JspException: In <formatNumber>, value attribute can not be parsed into java.lang.Number: "-" 오류 (0) | 2023.01.25 |
[Oracle] ORA-28001: 비밀번호 만기 해결방법 (0) | 2023.01.18 |
[Oracle] ORA-02287 에러 해결방법 (0) | 2023.01.17 |
[MyBatis] foreach not found 에러 (0) | 2023.01.09 |
댓글