[정리] 기능별 개념 정리(105)
-
GC
GC 자바에서는 메모리를 GC 알고리즘을 통해서 관리한다. 따라서 개발자가 메모리 처리 로직을 만들 필요도 없고 만들어서도 안된다. GC 는 런타임 데이터 영역중 Heap 영역이 대상이 된다. GC 가 제대로 동작하지 않으면 메모리가 가득차서 JVM Hang 이 걸리거나 메모리를 추가할당 받게된다. 메모리를 계속 추가 할당 받다가 넘치게되면 OutOfMemory 로 JVM 이 다운될 수 도 있다. GC 가 발생하거나 객체가 이동할 때마다 어플리케이션에 병목이 발생하고 성능에 영향을 준다. JVM 에서는 이를 관리하기 위해 스레드 로컬 할당 버퍼라는 것을 이용한다. 이는 스레드 별로 메모리 버퍼를 사용하여 다른 스레드에 영향을 주지 않는 메모리 할당 작업을 가능하게한다. GC 의 목표 메모리 할당 사용중인..
2020.04.25 -
JVM 의 실행, 종료, 클래스 로더, 아키텍쳐
JVM 실행 절차 Java 실행 옵션을 파싱한다. 힙크기를 할당한다. JIT 컴파일러 타입을 지정한다. 환경변수를 지정한다. (CLASSPATH, LD_LIBRARY_PATH) Main 클래스를 확인한다. HotSpot VM 을 생성한다. JNI_CreateJavaVM 가 HotSpot VM을 생성된다. JNI_CreateJavaVM 는 동시 호출이 불가능하다. JNI_CreateJavaVM 가 non_primordial 스레드에서 HotSpot VM을 생성한다. JNI 호환성을 점검한다. GC 준비를 한다. 각종 초기화를 한다. OS 모듈을 초기화한다. (Pid, 랜덤 시드) 커맨드 라인 변수를 파싱한다. 표준 자바 시스템 속성을 초기화된다. 동기화, 메모리같은 모듈이 초기화된다. libjava 같은 ..
2020.04.23 -
JIT 컴파일러
HotSpot VM 자바를 만든 Sun 에서는 자바의 성능 개선을 하던 도중 JIT 컴파일러를 개발한다. 그리고 이 이름을 HotSpot 이라고 짓는다. JIT 컴파일러는 아래에서 설명하겠지만, JVM 환경에서는 javac 가 컴파일한 바이트 코드를 읽고 실행하는 인터프리터가 존재한다. 이 때 인터프리터가 자주 수행되는 영역이 있다 하면 이를 hot code 영역이라고 부른다. JIT 컴파일러는 hot code 영역을 효율적으로 다루기 위해 만들어진 기능이다. 이렇게 HotSpot(JIT 컴파일러)이 탑재된 VM 은 자바 3 부터 기본 VM 으로 사용되어 왔다. HotSpot VM 에는 주요 3가지 컴포넌트가 존재한다. JIT 컴파일러 VM 런타임 메모리 관리자 번외) HotSpot VM 에는 OSR 컴..
2020.04.22 -
쿠버네티스 입문 - 14 - 헬름
헬름 차트는 템플릿 파일들의 집합이다. 헬름은 차트를 관리하는 쿠버네티스 패키지 매니저 도구다. 헬름은 차트와 차트 압축 파일을 만들 수 있다. 헬름은 차트 저장소와 연결해 쿠버네티스 클러스터에 차트를 설치 / 삭제 할 수 있다. 헬름은 차트들의 배포주기를 관리할 수 있다. 용어 정리 차트 : 쿠버네티스에서 실행할 어플리케이션을 만드는데 필요한 정보 묶음 컨피그 : 패키지한 차트에 넣어서 배포 가능한 오브젝트를 만들 때 사용할 수 있는 설정 릴리즈 : 특정 컨피그를 이용해 실행중인 차트의 인스턴스 헬름 클라이언트 : 헬름의 커맨드라인 인터페이스 틸러 서버 : 쿠버네티스 클러스터 안에서 헬름 클라이언트의 명령을 받아 쿠버네티스 API 와 통신하는 서버 차트 뮤지엄 : 차트를 사내에서만 운영해야할 경우 차트..
2020.04.09 -
쿠버네티스 입문 - 13 - 사용자 정의 자원
사용자 정의 자원 사용자 정의 자원 : 쿠버네티스에서 제공하는 내장 자원(Pod, Service) 이외에 사용자가 필요한 자원을 정의 할 수 있다. 사용자 정의 컨트롤러 : 사용자 정의 자원 자체는 구조화된 데이터이고 이를 이용해서 원하는 동작을 하려면 사용자 정의 컨트롤러 API 가 필요하다. 선언적 API 예시 파드를 2개 더 생성하라. (x) 파드가 2개 실행되어야 한다. (o) 트랜잭션을 엄수해야하는 정확한 상태를 명령하는 식이면 안된다. 오브젝트들이 어떤 상태인지를 바라는 지만 나타내야한다. 사용자 정의 자원을 정의 하는 방법 CRD 템플릿을 만든다. CRD를 관리하는 추가 서비스는 없어도된다. 사용자 정의 자원은 kube-apiserver 가 관리한다. Aggregated API Go 언어로 ..
2020.04.09 -
쿠버네티스 입문 - 12 - 오토스케일링 (HPA)
HPA (Horizontal Pod Autoscaler'0 파드를 오토스케일링 해주는 컨트롤러 매니저 오토스케일링 계산식은 다음과 같다. ex. 타겟 CPU 사용률 : 60 파드 A CPU 사용률 : 80 파드 B CPU 사용률 : 50 Math.ceil(80 + 50 / 60) = 3 따라서 파드는 3개로 유지된다. 오토스케일링 샘플 apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: kubernetes-simple-app-hpa namespace: default spec: maxReplicas: 10 minReplicas: 1 scaleTargetRef: apiVersion: extensions/v1beta1 kind: D..
2020.04.08