왜 JVM GC는 디스크,램과 달리 파편화/단편화 문제를 압축(memory compression)으로 해결한걸까?
·
JAVA
궁금증GC 알고리즘 중, 마크-스윕 알고리즘은 회수 대상에 대해서 마킹을 진행하고, 마킹된 대상들을 쓸어담아서 회수한다. 따라서 메모리에 살아남은 객체들 사이사이에 파편화된 공간이 남게 된다.이런 방식의 문제점은 메모리의 파편화가 생긴다는 것이다. 살아남은 객체 사이사이 공간들은 일정한 크기가 아니라 들쭉날쭉한 크기로 남게 될 것이고, 큰 객체가 생겨났을 때 해당 공간을 활용하지 못할 것이다.GC 알고리즘에서는 마크-컴팩트 알고리즘 혹은 마크-카피 알고리즘을 통해 이 단편화 문제를 해결한다. 컴팩트 알고리즘은 살아남은 객체들을 메모리공간의 첫 번째 구역부터 차례로 차곡차곡 쌓고 남은 영역을 회수한다. 마크-카피 알고리즘은 살아남은 객체들을 사용하지 않는 공간에 차곡차곡 쌓고 남은 영역을 회수한다. 이 알..
festabook의 TPS 기준 서버 및 MySQL 튜닝
·
들어가며festabook의 서버 설정 튜닝을 위해 TPS를 측정하면서, 향상시킨 이야기이다.festabook의 가장 주요 서비스인 지도 정보 조회 api를 기준으로 TPS를 측정시키고, 여러가지 실험을 해보면서 TPS가 향상되는지 확인하면서 튜닝을 진행했다.서버 TPS 측정 환경 설정해당 게시글에서 이야기하는 TPS는 RPS와 혼용해서 사용했다. 하나의 API를 트랜잭션 단위로 잡고, 계산했다.실제로 k6 환경을 구성하는 이야기는 또 게시글을 작성하겠다. 해당 글에서는 어떤 판단기준으로 채택했는지만 작성했다.k6 - TPS 측정 도구TPS 측정 도구로는 다양하게 있었지만 그 중에서 우리는 k6를 채택했다.k6는 자바스크립트를 이용해서 스크립트를 작성하기 때문에 코드를 읽기 편했다.xk6-dashboard..
festabook MySQL 설정 튜닝
·
들어가며festabook 서비스에서 설정한 MySQL 서버의 설정들에 대해서 알아보자.MySQLMySQL의 설정 파일은 /etc/mysql/mysql.conf.d/mysqld.conf에 있다.festabook에서는 총 3가지의 옵션을 조정했다.max_connections = 80innodb_buffer_pool_size = 1536Minnodb_buffer_pool_instances = 2하나씩 알아보자.max_connections동시 클라이언트 연결의 최대 허용 수이다.연결 관리자 스레드는 서버가 수신하는 네트워크 인터페이스에서 클라이언트 연결 요청을 처리한다. 데몬 스레드로 동작하기 때문에 SHOW PROCESSLIST에 보이지는 않는다.만약 서버가 max_connections 한도에 도달하여 새로운..
HikariCP의 커넥션 수를 낮추는 것이 어떻게 CPU 경합을 줄일 수 있을까?
·
들어가며이번에 HikariCP를 학습하면서 github wiki를 읽게 되었다.https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing간략히 요약하면 다음과 같다.우리는 CPU가 단일 코어라도 시분할 방식을 통해 여러 프로세스, 스레드들을 동시에 실행하는 것 처럼 사용하고 있다. 하지만, 당연하게도 이 방식은 스레드 수가 적을수록 성능이 높아진다. CPU들이 여러 스레드 혹은 프로세스를 동시에 실행하는 것 처럼 보이게 하기 위해 눈에 보이지 않을 속도로 프로세스와 스레드를 갈아끼우면서 실행하기 때문이다. 이때 컨텍스트 스위칭이 발생하고 오버헤드가 발생하기 때문에 결과적으로 성능은 다소 떨어질 수 있다. 즉, CPU 코어가 4개 있을 때 성능 ..
경쟁상태, Race Condition
·
Computer Science
목차경쟁 상태란?경쟁 상태는 언제 발생하는가?경쟁 상태 해결 방법은?경쟁 상태란?공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태를 말한다.동시 접근 시 자료의 일관성을 해치는 결과가 나타난다.경쟁 상태는 언제 발생하는가?데이터에 대해서 작업을 수행하던 도중 다른 프로세스가 해당 데이터에 작업을 하게 되면, 데이터가 일관성있게 남아 있지 않게 된다.특정 데이터에 대한 작업을 원자성을 가지도록 하고, 자원에 하나의 프로세스/스레드만 접근할 수 있도록하여 해결한다.경쟁 상태 해결 방법은?공유 자원에 대해 한 번에 하나의 스레드/프로세스만 작업을 할 수 있도록 보장해야한다.락공유 자원에 접근하는 프로세스/스레드는 락을 먼저 획득해야하만 접근할 수 있다. 만약 락을 획득할 ..
교착상태, DeadLock
·
Computer Science
목차데드락이란?데드락은 언제 발생할까?데드락 처리 방법데드락이란?데드락이란 한정된 자원에 접근하려 할때 서로가 서로의 자원을 대기하여 영원히 자원을 할당받지 못하고 대기하는 상태를 말한다.데드락은 언제 발생할까?데드락은 다음의 4가지 조건을 모두 만족할 때 발생한다.상호 배제, Mutual Exclusion자원은 한번에 하나의 프로세스만 접근 가능하다.공유 불가능한 자원의 동시 사용을 피하기위한 알고리즘이라고도 한다.점유 및 대기, Hold and Wait하나 이상의 자원을 점유하고 있으면서 다른 자원을 할당받기 위해 대기하고 있는 프로세스가 존재해야 한다.비선점, No Preemption다른 프로세스에게 할당된 자원은 빼앗을 수 없고 사용이 종료될 때까지 대기해야한다.순환 대기, Circular Wai..
CPU 스케줄링
·
Computer Science
목차스케줄링이란?스케줄링이 왜 필요한가?프로세스 상태와 전이란?CPU 스케줄링 종류와 간단한 설명CPU 스케줄링이란?CPU를 효율적으로 사용하기 위해 프로세스에게 CPU를 할당해주는 방법오버헤드를 낮추고CPU 사용률을 높이고기아 현상을 낮춘다.CPU 스케줄링이 왜 필요할까?아래의 이유들로 인해 CPU 스케줄링이 필요하다.CPU보다 프로세스의 수가 훨씬 많다.모든 프로세스에게 CPU를 할당해줄 수 없기 때문에 누구에게 CPU를 할당할지 정해야한다.I/O 작업과 CPU 작업의 균형어떤 프로세스는 I/O 작업으로 인해 대기하는 시간이 많고, 어떤 프로세스는 CPU 작업을 하는 시간이 많다.이 프로세스들을 적절히 사용해야 I/O 장치와 CPU 모두 바쁘게 활용할 수 있다.응답 시간 보장대화형 프로세스가 CPU를..
IPC, Inter Process Communication
·
Computer Science
IPC 란?프로세스는 독립적으로 실행된다. 즉, 다른 프로세스에게 영향을 받지 않는다.스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다.이런 독립된 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.쉽게 말하면 하나의 운영체제 내에서 실행 중인, Spring Boot와 MySQL이 통신하는 상황이 있을 것이다.프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.커널이란?운영체제의 핵심 설계 원칙 중 하나는 유저 공간과 커널 공간의 분리이다.유저 공간: 우리가 작성하는 일반적인 애플리케이션이 실행되는 영역, 이 공간의 프로그램들은 제한된 권한을 가지고 실행커널 공간: 운영체제의 핵심 코드가 실행되는 영..