[CPU 아키텍처란?]
:하드웨어(CPU)가 작동하는 방식을 나타냄. =마이크로 아키텍처(microarchitecture)
상용화된 제품은 ARM(RISC)과 x86(CISC) 등이 대표적인 예시임
[왜 알아야 하는가?]
: 서비스나 애플리케이션 운영 환경은 하드웨어에서부터 다양함.
- arm, x86과 같은 CPU부터 GPU, TPU, NPU 까지 고려해야할 환경이 많음
- 사용 가능한 리소스의 제한에 따라서 개발 방향도 변경될 수 있음
(리소스는 CPU, 메모리, Storage 성능, 네트워크 성능 등 다양한 변수가 존재함)
[실무와 가까운 중요이야기]
- 리눅스의 멀티 유저 특성
- 리눅스는 여러 사용자가 하나의 시스템에서 동시에 작업할 수 있는 환경을 지원함
- 각 사용자는 자신의 환경, 파일, 프로세스 등을 독립적으로 관리할 수 있음
- 컨테이너 기술
- 이는 리눅스의 멀티유저를 지원하는 특성을 확장해서, 프로세스와 리소스 등을 격리된 환경에서 사용할 수 있도록 제공함
- 이는 나아가서 클라우드 컴퓨팅과 마이크로서비스 아키텍처를 구성하는데 있어서 중요한 역할을 하게됨
[자주 겪는 문제]
- Too many open files / 최대 생성 프로세스 제한
- 설명
- 보안상의 이유로 Linux상에서 생성할 수 있는 프로세스나 프로세스가 열 수 있는 파일의 수 등을 제한하고 있음
- 따라서 개발 과정에서 한번쯤은 마주치는 오류 중 하나임
- 실제로 프로세스 생성이나 파일 접근을 동시에 다량으로 하거나, Socket 을 다루는 과정에서 발생할 수 있음
(Socket이 파일로 관리되기 때문)
- 실제로 프로세스 생성이나 파일 접근을 동시에 다량으로 하거나, Socket 을 다루는 과정에서 발생할 수 있음
- 해결 방법
- /etc/security/limits.conf 혹은 ulimit 명령어를 통해 제한 값을 조정할 수 있음
- 설명
- 부모 프로세스 - 자식 프로세스의 관리
- 필요에 따라서 자식 프로세스를 생성할 때, 부모 프로세스에 종속되지 않게 독립된 프로세스로 생성할 수 있음
- 고아 프로세스/좀비 프로세스 문제
- 시스템 자원이 낭비되고 있는 상태
- 프로세스 관리의 어려움
- PID(Process ID)의 낭비
- 시스템에서 사용할 수 있는 PID 수가 제한되어 있으므로, 프로세스 생성이 불가능해질 수 있
- OOM(Out of Memory)
- 메모리 누수(Memory Leak)의 경우
- 해결 방법
- 메모리 누수
- APM(Application Performance Monitoring) 혹은 프로파일러를 활용해 메모리 누수 지점을 찾고 분석함
- GC(Garbage Collector)최적화
- 미사용 자원 해제
- 메모리 누수
- 해결 방법
- 계획된 메모리를 초과하는 요청이 오는 경우
- (하드웨어적 제한) 32bit CPU의 경우 최대 4GB, 물리적인 메모리의 한계에 달하는 경우 등
- (소프트웨어적 제한) JVM이나 V8 Engine(Node.js에서 관리하는 것) 등에서 제한하는 경우 등
- 해결 방법
- 정답은 없음=설득의 영역
- 상황에 가장 알맞은 사양을 결정해야함. 어떨 때는 스펙 변경으로, 또 다룰 상황에서 코드의 최적화 등으로 해결할 수 있다.
- 트레이드 오프를 고려하여 적절한 선택을 할 수 있어야 한다.
- 메모리 누수(Memory Leak)의 경우