본문 바로가기

JVM9

[java] 자바 VM의 최대 메모리 사용량 확인 방법 자바 vm의 힙사이즈를 설정하는 Xmx 옵션이 여러개 설정되면 가장 마지막의 옵션이 설정됩니다. 다음의 코드는 자바 VM의 최대 메모리 사용량을 출력하는 프로그램입니다. 여기에 VM 옵션을 설정한 결과가 다음과 같습니다. -Xmx2048m Max mem=1820m -Xmx2048m -Xmx4096m Max mem=3641m -Xmx4096m -Xmx2048m Max mem=1820m -Xmx4096m Max mem=3641m 2021. 2. 16.
[java] JVM의 메모리가 Xmx 설정보다 많이 먹는 이유 자바 응용프로그램을 실행하는 중에 Xmx를 4G로 설정했는데 실제 메모리는 7G를 먹고 있어서 원인을 확인해 보았습니다. Xmx는 힙의 최대 메모리를 설정하는 명령입니다. JVM은 힙외에 다양한 요소들로 구성되어 있고 이 부분이 메모리를 사용합니다. # Xmx: 힙의 최대 메모리 사이즈 # MaxPermSize: Permanent Size 최대 메모리 # Xss: 스레드에 할당되는 Stack 사이즈 Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss] 힙영영외 나머지 영역에서 메모리가 필요하여 사용메모리가 늘어납니다. GC: 가비지 수집을 위한 메모리. 사용 중인 개체의 추적을 위한 그래프 생성. G1GC는 더 많은 메모리를 사용합니다.. 2021. 2. 6.
[java] jsvc 명령에서 Invalid JVM name specified server 오류 해결 방법 jsvc를 이용할 때 다음의 오류가 발생하는 경우가 있습니다. Invalid JVM name specified server Cannot locate JVM library file Service exit with a return value of 1 원인 이 오류는 jsvc를 실행할 때 전달하는 jvm의 이름이 틀렸기 때문입니다. JVM의 종류가 다양하기 때문에 자신이 사용하는 JVM의 정보를 확인하고 이 이름을 전달하면 됩니다. OpenJDK나 HotSpot은 jvm이름이 server 이기 때[문에 일반적인 설정에서는 문제가 없으나, 이클립스 VM의 경우 이름이 j9vm 이라서 이런 오류가 발생할 수 있습니다. JVM 이름 확인 JVM이름을 확인하고 이 이름을 JSVC 명령어에서 이요할 수 있습니다. JS.. 2021. 1. 29.
[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] common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms 메시지 최근 hive 작업을 진행하면서 하이브 메타스토어의 연결이 자주 끊어지는 현상이 발생하였습니다. 이 문제를 확인하기 위해서 로그를 확인하였는데 다음과 같은 메시지를 확인할 수 있었습니다. 이 메시지는 어떤 이유(보틍은 GC작업)에 의해서 JVM이 멈췄다는 것을 이야기 하고 있습니다. 2019-05-20T08:20:23,695 INFO [org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@503a5861([])]: common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms 2019-0.. 2019. 7. 1.
[java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링 자바는 가비지 콜렉션 기능을 이용해 메모리 관리의 효율성을 제공합니다. 자바의 가비지 콜렉션은 'weak generational hypothesis' 이론에 기반합니다. 이는 신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 것입니다. 이 이론에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오래동안 살아남은 객체는 Old 영역에 보관합니다. Young 영역은 Eden, S0, S1 영역으로 구분됩니다. 신규로 생성되는 객체는 Eden에 보관되고, Eden 영역이 100% 차게 되면 사용하지 않는 객체는 제거하고 사용되는 객체는 S0 영역으로 이동합니다. 이.. 2019. 6. 4.
[Java] JVM 메모리 구조 및 옵션 JVM의 메모리 구조를 알아보겠습니다. 메모리 공간 메모리 공간은 크게 힙영역과 힙영역이 아닌 공간으로 구분할 수 있습니다. 힙영역은 사용자가 크기를 정할 수 있는 공간입니다. Method : 클래스, 변수, 함수, 정적 변수, 상수 정보 등이 저장되는 영역. 프로그램 전체에서 공유 Stack : 함수 내에서 사용되는 매개변수, 지역변수, 리턴값 등이 저장되는 구역. PC Register: CPU의 Register와 역할이 비슷하고, 현재 수행중인 JVM 명령의 주소값이 저장 Native Method Stack: 네이티브 메소드 호출을 위해 할당되는 구역 Heap : new 명령어로 생성된 객체가 저장되는 영역. GC의 대상이 되는 영역 힙 영역 구조 힙영역은 가비지 콜렉션(GC)의 대상이 되는 영역입니.. 2019. 6. 4.
[java] 자바 가상 머신(JVM : Java Virtual Machine) JVM은 자바 파일(.java)을 컴파일하여 생성한 자바 바이트 코드(.class)를 해석하여 실행하는 인스턴스입니다. 자바는 한번 쓰고, 여러곳에서 사용하는 것을 목표로 하기 때문에 플랫폼에 독립적인 자바 바이트 코드를 생성하여 실행합니다. JVM은 각 플랫폼에 맞게 구현되고, 자바 바이트 코드가 각 플랫폼의 JVM위에서 동작합니다. JVM은 정해진 규격에 맞게 구현되기 때문에 바이트 코드가 같은 결과를 내는 것은 보장합니다. 하지만 처리 속도는 보장하지 않습니다. 각 제조사마다 세부적인 구현은 다르기 때문입니다. JVM의 종류는 다음의 위키에서 확인할 수 있습니다. 그 중에서 오라클의 HotSpot과 IBM JVM이 유명합니다. https://en.wikipedia.org/wiki/List_of_Ja.. 2019. 6. 3.
[팁] JVM을 재사용하여 성능을 향상 시키기 맵, 리듀스 태스크는 처리될 때 JVM를 새로 생성한다. 따라서 짧은 작업이 여러개 생성될 경우 JVM을 신규로 생성하는 오버헤드가 클 수도 있다. 이때 JVM을 재사용하여 작업을 처리하는 시간은 줄일 수 있다. 아래의 설정은 JVM에서 처리할 수 있는 작업의 개수를 설정한다. 기본 설정은 1이지만, -1로 설정하면 제한없이 사용할 수 있다. hadoop v1mapred.job.reuse.jvm.num.tasks=-1hadoop v2 mapreduce.job.jvm.numtasks=-1 http://www.nexr.co.kr/upload/mapli_deux.pdfhttps://hadooptips.wordpress.com/2013/03/19/improving-performance-with-jvm-reuse.. 2016. 2. 12.