본문 바로가기

전체 글

(258)
systemd와 도커 재시작 정책 — 재부팅해도 알아서 살아나게 하는 법 지난 글까지는 오래 켜져 있는 상태에서의 CPU 지표들을 다뤘다.그런데 실제로 안정성 문제를 진단하는 과정에서, "오래 켜져 있는 것"과는 다른 축의 질문을 마주하게 됐다.바로 "재부팅됐을 때 시스템이 알아서 다시 살아나는가"라는 질문이다. 오늘은 이 부분을 정리해보려고 한다.1. 문제 상황부터 짚어보기서버가 재부팅됐다고 생각해보자. 전원이 다시 들어오고, OS(우분투)는 켜졌다. 여기서 질문이 하나 생긴다.도커 컨테이너들은 누가 다시 켜주지? 사람이 매번 접속해서 컨테이너를 하나하나 손으로 켜줘야 한다면, 현장 접근이 어려운 환경에서는 특히 곤란해진다.그래서 "재부팅되면 알아서 자동으로 켜지게" 미리 설정해두는 방법이 필요하다.2. systemd가 뭔지systemd는 리눅스가 켜질 때 어떤 프로그램들을..
Context Switch가 뭐길래 성능에 영향을 줄까 이전 글에서 CPU 관련 지표를 거의 다 훑어봤다. 그런데 CPU 지표를 처음 정리할 때 "Context Switch 횟수가 비정상적으로 높으면 스레드가 비효율적으로 동작 중이라는 신호"라고 짧게만 언급하고 넘어간 부분이 있었다. 오늘은 이 개념을 제대로 정리해보려고 한다.1. 먼저 왜 이게 필요한지부터CPU 코어 하나는 한순간에 딱 하나의 작업만 할 수 있다. 그런데 서버를 보면 동시에 수십, 수백 개의 프로그램이 돌아가고 있는 것처럼 느껴진다.이게 가능한 이유는, CPU가 아주 짧은 시간 단위로 작업을 번갈아가면서 하기 때문이다. A 작업을 조금 하다가, B 작업을 조금 하다가, C 작업을 조금 하다가, 이걸 사람이 인지 못 할 정도로 빠르게 반복한다.2. Context Switch가 뭔지Contex..
top 화면의 나머지 컬럼들 — sy, ni, hi, si, st 이전 글에서 top의 %Cpu(s) 줄 중 us(user), wa(iowait), id(idle) 세 개를 다뤘다. 그런데 이 줄에는 사실 다섯 개가 더 있었다.%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 95.4 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st나머지 sy, ni, hi, si, st를 정리하기 전에, 먼저 짚고 갈 개념이 하나 있다. 우리 시스템은 도커(Docker) 기반으로 돌아가는데, 이게 뭔지 알아야 뒤에 나올 sy(시스템) 설명이 와닿는다.0. 도커(Docker)가 뭔지도커도커 말만 많이 들었지 내기준 정확히 뭘 의미하는지 모르고 그냥 대충 알아들었었기 때문에 한번 정리하려고 한다!도커는 프로그램을 "컨테이너"라는 독립된 상자 안에 담아서..
CPU-bound vs I/O-bound 이전 글에서 Load Average가 뭔지, 왜 코어 수랑 같이 봐야 하는지 정리했다. 그런데 Load Average가 높게 나왔을 때, 그 원인이 다 같은 이유는 아니었다. 오늘은 그 원인을 구분하는 개념인 CPU-bound와 I/O-bound를 정리해보려고 한다.1. 먼저 "무슨 일을 기다리느냐"의 차이프로그램이 뭔가 오래 걸리는 작업을 할 때, 그 이유는 크게 두 가지다.CPU가 진짜 열심히 계산하느라 오래 걸리는 것CPU는 사실 할 일이 없는데, 뭔가 다른 걸(디스크, 네트워크) 기다리느라 오래 걸리는 것이 둘을 구분하는 게 CPU-bound와 I/O-bound다.2. CPU-bound란"작업 시간의 대부분을 CPU가 실제로 계산하는 데 쓰는 것"이다.예를 들면:AI 모델이 이미지를 분석해서 "이..
Load Average란? — 숫자 하나로 서버 상태 읽는 법 지난 글까지는 메모리, GPU, 배포 관점에서 안정성을 살펴봤다. 그런데 실제로 안정성 테스트의 판정 기준을 들여다보다가, CPU 관련 지표가 빠져 있다는 걸 발견했다. CPU를 제대로 보려면 가장 먼저 마주치는 개념이 Load Average였다. 오늘은 이 개념을 정리해보려고 한다.1. Load Average가 뭔지Load Average = "지금 이 서버에서, 실행되고 싶은데 순서를 기다리고 있는 작업이 평균적으로 몇 개나 있나"를 나타내는 숫자다.top이나 uptime 같은 명령어를 치면 이렇게 세 개의 숫자가 나온다.load average: 2.15, 1.87, 1.42이 세 숫자는 각각 최근 1분, 5분, 15분 동안의 평균값이다. 즉 "최근 1분 동안은 평균 2.15개, 최근 5분 동안은 평균..
배포하면 왜 서버가 재시작될까? — 무중단 배포란? 이전 글에서 메모리, GPU 등 실제로 확인해야 할 지표와 도구를 정리했다. 그런데 지표를 아무리 잘 수집해도, 배포가 자주 일어나면 그 지표들이 계속 초기화돼버리는 문제가 있었다.그 이유 — "배포하면 왜 서버가 재시작되는지", 그리고 이걸 해결하는 "무중단 배포"에 대해 정리해보려고 한다.1. 배포(Deploy)란 정확히 뭘 하는 걸까"배포한다"는 건 간단히 말하면 "새 코드로 서버를 바꿔치기 한다"는 뜻이다. 흐름은 대략 이렇다.① 코드 수정 → ② 빌드(코드를 실행 가능한 형태로 변환) → ③ 서버에 새 버전 올리기 → ④ 기존 프로세스 종료 → ⑤ 새 프로세스 실행여기서 핵심은 ④, ⑤번이다. 서버 프로그램(프로세스)은 한번 실행되면 계속 메모리에 떠 있는 상태인데, 코드를 바꾸려면 지금 떠 있..
안정성 테스트, 실제로는 뭘 보고 확인할까? 이전 글에서 Load Test, Stress Test, Spike Test, Soak Test의 차이를 정리했다. 그중 우리가 계속 얘기해온 "오래 켜놔도 괜찮은가"는 소크 테스트(=에이징 테스트) 영역이었다. 그런데 막상 "그래서 실제로 뭘 보고 판단하나요?"라는 질문에 답하려니 막막했다. 오늘은 실제로 확인해야 할 지표(메트릭)와, 그걸 어떤 도구로 확인하는지 정리해보려고 한다.1. 그래서 뭘 봐야 하나 — 대표 지표 4가지지금까지 "시간이 지나면서 뭔가 누적된다"는 개념은 배웠는데, 실제로는 이걸 숫자로 확인해야 한다. 대표적으로 보는 지표는 다음과 같다.① 메모리 사용량 (RSS)RSS(Resident Set Size): 지금 이 프로그램이 실제로 차지하고 있는 메모리 크기시간에 따라 이 숫자가 ..
안정성 테스트의 종류 이전 글에서 시간이 지나면서 서서히 쌓이는 문제인 메모리 누수에 대해 알아봤다. 그런데 안정성 테스트를 공부하다 보니, "오래 켜놔도 괜찮은가"를 확인하는 것 말고도 비슷하게 생긴 테스트 이름들이 여러 개 있었다. Load Test, Stress Test, Spike Test, Soak Test... 처음엔 다 똑같은 말인 줄 알았는데, 알고 보니 "어떻게 부하를 주느냐"가 완전히 달랐다. 이 네 가지를 비교해서 정리해보려고 한다.1. 부하 테스트 (Load Test)"평소만큼 트래픽 줬을 때 잘 버티나?"실제 운영 환경에서 예상되는 정도의 트래픽(사용자 수, 요청 수)을 줘서 확인시간은 짧게 (몇 분~몇 시간)목적: 정상적인 상황에서 문제없이 동작하는지 확인하는 것비유하자면, 평소 출근 시간대 지하철에..

반응형