TPM실

단일 프로세스에서 NUMA가 야기한 성능 저하

물리적으로는 CPU 1개지만, 그 안에 코어가 여러 개 들어있습니다. 각 코어는 연산을 위해 메모리 컨트롤러를 거쳐 메모리에 접근합니다. 이때, 코어가 메모리에 접근하는 속도를 올리거나 동시 전송량을 늘릴 수 있다면 코어 연산 능력을 높일 수 있습니다. 다만 이들 사이에 오가는…

strace가 -k 옵션을 만난 날

strace는 리눅스에서 서버 병목을 확인할 수 있도록, 시스템 콜(시스템 호출, System call)을 측정하는 툴입니다. strace를 활용하면, 리눅스 커널과 프로세스 사이에서 발생하는 시스템 콜, 시그널 전달(Signal deliveries), 프로세스 상태 변화…

C/C++ 정적 분석 도구, Cppcheck

이슈를 발견한 후에 바로바로 수정하면서 크래시에 대응하는 방법도 있습니다. 하지만 개발 초기가 아니라 개발 후기 또는 라이브 서버였다면 어떨까요? 서비스 장애가 빈번히 발생해 사용자에게 치명적인 경험을 줄 수도 있습니다. 그래서 크래시를 미리 확인할 방법을 마련해 이슈에 선제대응할…

리눅스용 메모리 프로파일러, Heaptrack(2/2)

GUI 환경에서 동작하는 GUI 분석기는 WSL로 설치한 리눅스 셸에서 실행해야 합니다. 리눅스 안에서 파일을 찾아 이동하는 건 번거로울 수 있으니, 수집 파일이 들어 있는 폴더 위에서 ‘Shift + 우클릭’을 누르면 ‘여기에서 Linux 셸 열기’로 바로 들어가는 방법을 추천합니다.

리눅스용 메모리 프로파일러, Heaptrack(1/2)

Heaptrack은 모든 메모리 할당마다 스택 트레이스(Stack Traces) 주석을 붙입니다. 전용 분석 도구를 활용해 힙 메모리(Heap Memory) 프로필도 볼 수 있으므로, 메모리릭이 발생하는 지점을 찾을 수 있습니다. Heaptrack은 크게 두 부분으로 구성돼 있습니다.

C/C++ 대규모 프로젝트에서 빌드 속도를 올려보자

상용 툴 이외에는 어떤 방법이 있을지, 효율적으로 빌드속도를 개선할 방법은 없을지 궁금해서 더 찾아보던 중 눈에 들어온 방법이 유니티 빌드(Unity Build)였습니다. 여기서 이야기하는 유니티 빌드는 지금 우리가 흔히 떠올리는 유니티(Unity) 게임 엔진 이야기가 아닙니다.

워라밸 브레이커, 메모리릭을 찾아라(4/4)

메모리릭을 유발하는 객체에 대한 힌트를 얻었다고 하더라도, 메모리릭을 찾기 위해서는 기술적인 패턴을 알아야 합니다. smart pointer 및 smart pointer로 delete 누락과 overwrite 등의 패턴은 보기 힘들어졌습니다만 고질적인 메모리릭을 유발하는 패턴이…

워라밸 브레이커, 메모리릭을 찾아라(3/4)

애플리케이션이 사용하는 힙(Heap) 영역을 확인해 봅시다. 이때 사용하는 커맨드는 ‘!heap’입니다. 옵션으로 ‘s’를 입력하면, 애플리케이션이 사용 중인 힙 영역을 모두 볼 수 있습니다. [Reserv] 항목이 크게 잡혀있는 영역이 애플리케이션이 주로 사용하는 힙 영역입니다.

워라밸 브레이커, 메모리릭을 찾아라(2/4)

충분한 스펙을 갖춘 장비를 준비해 서비스를 돌려 봅시다. 얼마나 서비스할 수 있는지 숫자로 표현해보겠습니다. 1시간에 200MB면, 하루에 4.8GB씩 메모리가 늘어납니다. 이를 서비스 가능일로 환산하면 128GB를 준비해도 26.6일이면 가득찹니다. MMORPG 점검 주기가…

워라밸 브레이커, 메모리릭을 찾아라(1/4)

메모리릭(Memory Leak, 메모리 누수)이란 무엇일까요? 메모리릭은 개발자가 의도하지 않은 메모리를 점유하고 있는 현상을 말합니다. 메모리릭은 때를 가리지 않고 서비스 장애를 유발해, 작업자를 끊임없이 괴롭힙니다. 그래서 메모리릭을 찾을 때는 가지고 있는 모든 것을 활용해…