본문 바로가기

GC6

[hive] collect_list()와 같은 UDAF 함수의 GC 오류 해결 방법 하이브 기본 UDAF를 사용하는 중에 Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 오류가 발생하는 경우가 있습니다. collect_list(), collect_set()을 이용하는 경우 발생할 수 있는데 너무 많은 데이터가 집계되어 JVM의 힙사이즈를 넘어설 때 많이 발생합니다. 이럴 때는 하나의 맵에서 처리하는 데이터를 줄이고, 컨테이너의 메모리를 늘려서 문제를 해결할 수 있습니다. -- 매퍼 개수 조정 set mapreduce.input.fileinputformat.split.maxsize=8000000; set mapreduce.input.fileinputformat.split.minsize=4000000; set tez.gr.. 2020. 6. 1.
[java] 가비지 콜렉션의 종류(GC: Garbage Collection) GC의 종류에 대해서 알아보겠습니다. SerialGC 싱글 스레드로 Young 영역, Old 영역을 처리 하나의 스레드를 이용해서 동작하기 때문에 멀티 스레드 환경의 서버 프로그램에서는 부적합 일시 중지에 관대한 클라이언트 프로그램이나 테스트용 프로그램에 적합 java -XX:+UseSerialGC Mark-Sweep-Compact 알고리즘을 이용 Mark: 살아 있는 객체를 선택 Sweep: 선택되지 않은 객체를 정리 Compact: 메모리 공간을 압축 ParallelGC Minor GC를 여러개의 스레드를 이용하여 동시에 처리 Major GC는 싱글 스레드로 처리 SerialGC보다 빠르지만 더 많은 자원을 소모 Mark-Sweep-Compact 알고리즘을 이용 java -XX:+UseParallel.. 2019. 7. 24.
[java] JVM이란? JVM 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행하는 주체 Linux, Window, Mac 등 OS에 맞게 구현 JVM Spec에 맞춰 구현 Oracle, Eclipse, IBM 등 여러 회사에서 구현 HotSpot, OpenJ9 JVM Language JVM에서 실행가능한 언어 Clojure, Groovy, JRuby, Jython, Kotlin, Scala 자바 바이트 코드 자바 바이트 코드 = 클래스 파일 = .class 컴파일러가 .java 파일을 .class 파일로 해석 자바 컴파일러, 스칼라 컴파일러, 코틀린 컴파일러 등 JVM은 자바 바이트 코드를 해석해서 실행 Write Once, Run Everywhere JVM 주요 모듈 클래스 로더(Class L.. 2019. 7. 8.
[hive] TEZ 작업중 GC overhead limit exceeded 오류 처리 하이브 TEZ작업 중 발생하는 다음의 GC오류는 수행시간의 많은 부분(98%)이 GC에 들어가고, GC를 수행하여도 사용할 수 있는 메모리가 부족(2%가 복구)할 때 발생하는 오류입니다. -XX:-UseGCOverheadLimit 옵션을 이용하여 이 오류가 발생하지 않도록 설정 할 수 있습니다. 자바 프로그램에서는 -Xmx 옵션으로 힙의 용량을 늘여서 해결할 수 있습니다. 하이브에서는 컨테이너의 메모리 용량과 힙의 용량을 늘여서 해결할 수 있습니다. Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.Arrays.copyOf(Arrays.java:3181) TEZ 컨테이너의 메모리 증설 방법은 다음과 같습니다. 또한.. 2019. 7. 5.
[java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링 자바는 가비지 콜렉션 기능을 이용해 메모리 관리의 효율성을 제공합니다. 자바의 가비지 콜렉션은 'weak generational hypothesis' 이론에 기반합니다. 이는 신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 것입니다. 이 이론에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오래동안 살아남은 객체는 Old 영역에 보관합니다. Young 영역은 Eden, S0, S1 영역으로 구분됩니다. 신규로 생성되는 객체는 Eden에 보관되고, Eden 영역이 100% 차게 되면 사용하지 않는 객체는 제거하고 사용되는 객체는 S0 영역으로 이동합니다. 이.. 2019. 6. 4.
[hive][tez] tez의 실행 시간 요약 확인을 위한 옵션(hive.tez.exec.print.summary)및 GC시간의 하이브 튜닝 하이브의 tez 실행엔진을 이용할 때 아래의 옵션을 이용하면 실행의 각 단계에서 걸리는 시간을 확인할 수 있다. hive.tez.exec.print.summaryDefault Value: falseAdded In: Hive 0.14.0 with HIVE-8495If true, displays breakdown of execution steps for every query executed on Hive CLI or Beeline client. 옵션을 true 로 설정하고 쿼리를 실행하면 다음과 같이 실행의 각단계에서 걸리는 시간을 확인할 수 있다. 이때 각 단계에서 걸리는 시간을 이용하여 쿼리를 튜닝할 수 있다. Launching Job 1 out of 1 Status: Running (Executing .. 2018. 7. 11.