전체 글
-
RSS와 VSZ 차이점TECH/OS 2023. 1. 14. 09:58
프로세스에 의해 메모리가 얼마나 사용되고 있는지 측정하기 위한 방법으로 RSS와 VSZ가 있다. Resident Set Size(RSS) Virtual Memory Size(VSZ) Resident Set Size 프로세스에 의해 physical RAM에서 얼마만큼의 메모리가 사용되고 있는지를 나타낸다. shared library에 의해 할당된 메모리, 힙, 스택 메모리도 포함한다. swap out된 메모리를 포함하지 않은 수치이다. 공유된 라이브러리가 서로 다른 프로세스에 중복되어 집계될 수 있다. 하지만 RSS는 신뢰할 수 있는 측정치이다. Virtual Memory Size 프로세스가 실행 후 얼마만큼의 메모리에 접근할 수 있는지를 나타낸다. swap 메모리, 외부 라이브러리의 메모리 그리고 할당됐..
-
Singleton Pattern이란?TECH/Java 2022. 12. 16. 13:55
Singleton Design Pattern 한 클래스에서 여러 객체가 생성될 수 없도록 하는 방법. Singleton 사용 사례 로깅, 데이터베이스 등 Singleton 클래스가 되려면? 반드시 하나의 인스턴스만 갖는다. 인스턴스는 글로벌 범위에서 접근할 수 있어야 한다. Singleton 클래스를 만드는 방법 Eager Initialization 방식, Lazy Initialization 크게 두 방식이 있다. Eager Initialization 클래스의 실제 사용 여부와 무관하게 객체는 무조건 생성된다. 간단하게 구현할 수 있다는 장점이 있는 반면, 실제로 사용되지 않아도 객체를 생성한다는 단점이 있다. Lazy Initialization 실제로 객체가 필요한 시점에 생성된다. Singleton ..
-
Managed Language 자바, 자바는 어떻게 힙에서 제거할 객체를 알아낼까?TECH/Java 2022. 11. 29. 11:23
Managed Language Java vm은 객체가 더 이상 필요 없을 때 메모리를 회수한다. 프로그래머가 직접 메모리를 해제해야 하는 다른 언어와 가장 큰 차이점이다. 자바에서 메모리 leak이 발생하는 것은 불가능하다. 자바에서 new 키워드를 사용할 경우 os에서 메모리를 가져오는 것이 아니라 virtual machine을 통해서 가져오게 된다. virtual machine은 c로 작성된 프로그램이고, 이 프로그램이 os에서 가져온 메모리를 관리한다. 따라서 vm에 문제가 없다면, os 레벨의 메모리 leak은 발생할 수 없다. 메모리 leak이 발생했다면 그것은 vm의 문제이고 자바 프로그래머의 책임이 아니다. GC는 메모리를 free up하는 과정이다. GC는 Lisp에서 개발되었고, 자바는 ..
-
Java String Pool이란?TECH/Java 2022. 11. 17. 20:54
String Interning String의 불변성 덕분에, JVM은 String Pool 내에서 단일 문자열에 대해 단 하나의 복제본만 가짐으로서 String에 할당된 메모리를 최적화 할 수 있다. 이 과정을 interning이라고 한다. String 변수를 만들고, 값을 할당할 때 JVM은 같은 값을 갖는 String 을 pool에서 찾는다. 발견한 경우 Java Compiler는 추가로 메모리를 할당하지 않고 간단히 메모리 주소에 대한 레퍼런스를 응답한다. 발견하지 못한 경우, pool에 String을 추가되고 (interned) 레퍼런스를 응답한다. String constantString1 = "foo"; String constantString2 = "foo"; assertThat(constant..
-
Namespaces 네임스페이스란?TECH/Kubernetes 2022. 11. 4. 19:33
Kubernetes에서 namespaces는 하나의 클러스터 내의 리소스 그룹을 분리하는 메커니즘을 제공한다. 리소스의 이름은 네임스페이스 내에서 유일하지만, 모든 네임스페이스에 걸쳐 유일한 것은 아니다. 네임스페이스 기반 스코핑은 namespace 기반 오브젝트(Deployments, Services, etc)에만 가능하며 클러스터 기반 오브젝트에는 사용할 수 없다. 언제 네임스페이스를 사용해야 할 까? 많은 유저가 여러팀, 프로젝트으로 나뉜 환경에서 사용되는 것이 목적이다. 사용자가 열명 정도로 얼마 안되는 클러스터에서는 네임스페이스를 사용할 필요가 전혀 없다. 네임스페이스가 제공하는 기능들이 필요할 때 사용을 시작해라. 네임스페이스는 이름에 대한 범위를 제공한다. 리소스의 이름은 네임스페이스 내에서..
-
Spring Data R2DBC + Jasync 사용시 AbstractMethodError가 발생하는 경우TECH/Spring 2022. 10. 31. 18:50
Spring Data R2DBC 2.7.1에서 데이터베이스 드라이버를 Jasync (mysql) 사용했을 때에 저장할 경우 AbstractMethodError 에러가 발생함을 확인하였다. 에러 발생 환경 Spring Data R2DBC 2.7.1 Jasync 2.0.1 에러 로그 2022-07-06 11:20:53.459 ERROR 7370 --- [netty-thread-18] reactor.core.publisher.Operators : Operator called default onErrorDropped java.lang.AbstractMethodError: Method com/github/jasync/r2dbc/mysql/JasyncInsertSyntheticMetadata.getColumnMet..
-
Mono.zipWith 혹은 Mono.zipWhen이 호출되지 않을 때TECH/Java 2022. 10. 23. 19:43
소스 Mono가 empty이거나 Mono인 경우, 일부 조합은 절대 호출되지 않을 수 있다. 정의에 따르면 소스에서 결과물을 만들어 내기 위해 요소가 필요한 zip, zipWith, zipWhen와 같은 transformer(변환 연산자)에서 흔히 발생하는 일이다. 따라서 data-supressing 오퍼레이터를 zip에 사용하는 것은 문제가 된다. data-supressing operators 예시 then thenEmpty(Publisher) ignoreElements ignoreElement() when(Publisher) 설명이 잘 와닿지가 않는데, 간단하게 예시를 통해 살펴보자. @Test void test1() { StepVerifier.create(Mono.empty() // 1 ... em..
-
Spring Boot 애플리케이션의 Health Endpoint 상태가 Eureka에 영향을 끼칠까?TECH/Spring 2022. 10. 14. 21:34
결론만 먼저 말하자면 eureka.client.healthcheck.enabled: true인 경우 영향을 끼치고, false(기본값)인 경우 영향을 끼치지 않는다. 먼저, Spring Boot Actuator의 Health Information이 무엇인지 알아보자. Spring Boot Actuator - Health Information Health Endpoint란? actuator에서 실행 중인 애플리케이션의 상태를 체크하기 위해 제공한다. 일반적으로 프로덕션 환경에서 시스템이 내려갔을 때 이에 대한 알림을 주기 위해 사용된다. 이 정보는 health 엔드포인트에 의해 노출되는데, health endpoint는 management.endpoint.health.show-details 과 manage..