메모리 넘 침

2903 단어 오류 해결 방안
\#메모리 넘 침 메모리 넘 침 이란 응용 시스템 에 회수 할 수 없 는 메모리 가 존재 하거나 사용 하 는 메모리 가 너무 많아 서 프로그램 실행 에 필요 한 메모리 가 JVM 이 제공 하 는 최대 메모리 보다 크다 는 것 을 말 합 니 다.\#자바 가 메모리 자바 의 메모리 관 리 를 어떻게 관리 하 는 지 는 대상 의 분배 와 방출 문제 입 니 다.자바 에서 메모리 의 분 배 는 프로그램 에 의 해 이 루어 집 니 다.메모리 의 방출 은 쓰레기 수집 기(Garbage Collection,GC)에 의 해 이 루어 집 니 다.개발 자 는 GC 호출 을 통 해 메모 리 를 방출 할 필요 가 없습니다.왜냐하면 서로 다른 JVM 실현 자 는 서로 다른 알고리즘 으로 GC 를 관리 할 수 있 기 때 문 입 니 다.메모리 사용 이 어느 정도 에 이 르 렀 을 때 GC 가 작업 을 시작 하고 정기 적 으로 실 행 됩 니 다.GC 를 중단 하 는 경우 도 있 습 니 다.\#GC 회수 메커니즘 GC 는 무용 하고 다른 대상 이 인용 하지 않 는 대상 이 차지 하 는 공간 만 회수 할 수 있다.자바 의 메모리 쓰레기 수 거 메커니즘 은 프로그램의 주요 실행 대상 부터 인용 체인 을 검사 합 니 다.한 번 훑 어 본 후에 인용 되 지 않 은 고립 된 대상 을 발견 하면 쓰레기 수 거 로 사용 합 니 다.\#메모리 가 넘 치 는 원인 은 다음 과 같은 몇 가지 가 있 습 니 다.① 메모리 에 불 러 온 데이터 의 양 이 너무 많 습 니 다.예 를 들 어 데이터 베이스 에서 너무 많은 데 이 터 를 꺼 내 는 ② 집합 류 에서 대상 에 대한 인용 이 있 고 사용 후 비 워 지지 않 습 니 다.JVM 이 ③ 코드 에 순환 이 없 거나 순환 중 에 중복 되 는 대상 실체 ④ 를 회수 하지 못 하 게 합 니 다.사용 하 는 제3자 소프트웨어 에 BUG ⑤ 시작 매개 변수 메모리 설정 치가 너무 작 습 니 다.\#메모리 가 넘 치 는 해결 방식 ① JVM 시작 매개 변 수 를 수정 하여 메모 리 를 직접 증가 합 니 다.용 기 는 tomcat:catalina.bat 를 수정 합 니 다set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%아래 에 추가 합 니 다.
JAVA_OPTS='-Xms512m -Xmx1024m'
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"

그 중에서JAVA_OPTS='-Xms512m -Xmx1024m'Tomcat 이 사용 하 는 메모리 의 크기 를 설정 합 니 다.-XX:PermSize=64M -XX:MaxPermSize=256m클래스 공간(로 딩 클래스 에 사용)의 메모리 크기 ② 오류 로 그 를 검사 하고'OutOfmMemory'오류 전에 다른 이상 이나 오류 가 있 는 지 확인 합 니 다.
--java.lang.OutOfMemoryError: ......java heap space....
--java.lang.OutOfMemoryError: GC overhead limit exceeded 
JDK6      , GC                ;        ,       ,       。 
  【    】: 
  1、                   ; 
  2、    JVM  ,       : 
  < jvm-arg>-XX:-UseGCOverheadLimit< /jvm-arg> 
--java.lang.OutOfMemoryError: PermGen space:   P     ,     JVM   : 
  < jvm-arg>-XX:MaxPermSize=128m< /jvm-arg> 
  < jvm-arg>-XXermSize=128m< /jvm-arg> 
  【 】: 
  JVM Perm       Class Meta   ,Class  Loader      PermGen space,         ,GC                  ,   64M  ,              ,  64M           ,        ,  128m  。 

③ 코드 를 조사 하고 분석 하여 메모리 가 넘 칠 수 있 는 위 치 를 찾아낸다.몇 가 지 를 중점적으로 살 펴 보 자.-코드 에 사 순환 이나 재 귀적 호출 이 있 는 지 확인 하 자.-새로운 대상 의 실체 가 반복 되 는 지 확인 하 자.-데이터베이스 조회 에서 모든 데 이 터 를 얻 은 조회 가 있 는 지 확인 하 자.일반적으로 한 번 에 10 만 개 를 메모리 에 기록 하면 메모리 가 넘 칠 수 있다.List,Map 등 집합 대상 이 사용 후 제거 되 지 않 은 문제 가 있 는 지 확인 합 니 다.List,Map 등 집합 대상 은 항상 대상 에 대한 인용 이 저장 되 어 있어 서 이 대상 들 이 GC 에 회수 되 지 못 하 게 한다.④ 메모리 보기 도 구 를 사용 하여 메모리 사용 상황 을 동적 으로 봅 니 다:Optimizeit Profiler,JProbe Profiler,JinSight 와 Java 1.5 의 Jconsole 등.일반적으로 정상 적 인 시스템 이 시작 이 끝 난 후에 메모리 의 사용량 은 기본적으로 안정 적 이 며 무제 한 성장 이 아니 라 안정 적 이다.시스템 이 실 행 될 때 사용 하 는 메모리 의 크기 를 지속 적 으로 관찰 하면 메모리 사용 모니터링 창 에서 기본 규칙 인 톱니 모양 의 그림 선 을 볼 수 있 습 니 다.메모리 의 크기 가 지속 적 으로 증가 하면 시스템 에 메모리 누 출 문제 가 존재 한 다 는 것 을 의미 합 니 다.

좋은 웹페이지 즐겨찾기