netfilter로 커널 수준 패킷 조작

네트워크 관리자, 보안 전문가, 그리고 커널 개발자라면 누구나 Netfilter라는 이름을 들어봤을 겁니다. 리눅스 커널에 내장된 이 강력한 프레임워크는 패킷 필터링, 네트워크 주소 변환 (NAT), 그리고 다양한 종류의 패킷 조작을 위한 기반을 제공합니다. 단순한 방화벽 규칙 설정부터 복잡한 트래픽 리디렉션, 심지어 패킷 내용 수정까지, Netfilter는 네트워크 트래픽을 제어하고 관리하는 데 필요한 다양한 도구를 제공합니다. Netfilter의 핵심 […]

OOM Killer 동작 원리와 방지 방법

컴퓨터를 사용하다 보면, 특히 서버 환경에서 “OOM Killer”라는 존재를 마주하게 됩니다. Out Of Memory Killer의 약자인 OOM Killer는 시스템 메모리가 부족해질 때, 프로세스를 강제로 종료시켜 시스템을 보호하는 역할을 수행합니다. 마치 응급 환자를 살리기 위해 불가피하게 일부 장기를 포기하는 것과 같은 상황이라고 할 수 있습니다. 하지만 이 “포기”되는 프로세스가 중요한 서비스라면, 시스템 장애로 이어질 수 있기 […]

스왑 사용 최적화 및 비활성화 가이드

컴퓨터를 좀 안다 하는 사람이라면 ‘스왑’이라는 단어를 한 번쯤은 들어봤을 겁니다. 마치 컴퓨터의 비상용 메모리처럼 작동하는 스왑 공간은, RAM이 부족할 때 하드디스크의 일부를 RAM처럼 활용하여 시스템이 멈추는 것을 방지하는 역할을 합니다. 하지만 이 ‘스왑’이라는 녀석, 잘 쓰면 약이지만 잘못 쓰면 독이 될 수도 있습니다. 이번 리뷰에서는 스왑 사용 최적화 및 비활성화 가이드를 통해 스왑 공간을 […]

vmstat 필드 해석과 활용법

서버 관리자, 개발자, 시스템 엔지니어라면 누구나 한 번쯤은 시스템 성능 문제 해결을 위해 밤샘 작업을 했던 경험이 있을 겁니다. 그럴 때마다 우리를 괴롭히는 것은 바로 ‘병목 현상’이죠. CPU가 문제인지, 메모리가 부족한 건지, 디스크 I/O가 느린 건지… 짐작만으로는 해결하기 어렵습니다. 이때 구세주처럼 등장하는 도구가 바로 vmstat입니다. 이 리뷰에서는 vmstat의 구석구석을 파헤쳐, 단순한 명령어 이상의 가치를 발견하고 […]

dstat과 iotop으로 IO 병목 분석

서버 관리자라면 누구나 한 번쯤 겪는 악몽, 바로 시스템 성능 저하입니다. CPU, 메모리, 네트워크 등 다양한 원인이 있겠지만, 그중에서도 IO 병목 현상은 찾기도 어렵고 해결하기도 까다로운 골칫덩이입니다. 이번 리뷰에서는 바로 이 IO 병목 현상을 분석하고 해결하는 데 도움을 주는 두 가지 강력한 도구, dstat과 iotop에 대해 자세히 알아보겠습니다. dstat과 iotop, 왜 함께 봐야 할까요? dstat은 […]

strace와 ltrace로 디버깅하기

리눅스 시스템에서 프로그램이 예상대로 동작하지 않을 때, 어디서부터 문제를 찾아야 할지 막막할 때가 많습니다. 이때 strace와 ltrace는 마치 셜록 홈즈의 돋보기처럼 시스템 콜과 라이브러리 호출을 추적하여 문제 해결의 실마리를 제공하는 강력한 도구입니다. 이 리뷰에서는 strace와 ltrace의 기본적인 사용법부터 고급 활용, 그리고 실제 디버깅 상황에서의 경험을 바탕으로 두 도구의 장단점을 심층적으로 분석해 보겠습니다. strace와 ltrace, 무엇이 […]

cgroups v2로 리소스 격리 환경 구성

컨테이너 기술이 대세가 되면서 리소스 격리의 중요성은 더욱 부각되고 있습니다. 도커, Kubernetes와 같은 컨테이너 런타임의 핵심 기술 중 하나인 cgroups (control groups)는 프로세스 그룹의 리소스 사용량을 제한하고 격리하는 역할을 담당합니다. 특히 cgroups v2는 기존 v1의 문제점을 개선하고 현대적인 워크로드에 맞춰 설계된 차세대 리소스 관리 메커니즘입니다. 이번 리뷰에서는 cgroups v2를 사용하여 리소스 격리 환경을 구축하는 과정과 […]

cpuset과 taskset으로 CPU 할당 제어

고성능 컴퓨팅 환경에서 CPU 자원 관리는 시스템 전체의 효율성을 극대화하는 데 매우 중요합니다. 특히 여러 애플리케이션이 동시에 실행되는 서버 환경이나, 특정 작업에 집중적인 CPU 성능이 요구되는 경우, CPU 할당을 정밀하게 제어하는 것은 필수적입니다. 이러한 요구를 충족시켜주는 강력한 도구가 바로 cpuset과 taskset입니다. 이 글에서는 cpuset과 taskset이 무엇인지, 어떤 기능을 제공하는지, 그리고 실제 사용 경험을 바탕으로 장단점을 […]

numactl로 NUMA 메모리 최적화

최근 멀티 코어 프로세서의 발전은 컴퓨팅 성능을 비약적으로 향상시켰지만, 동시에 메모리 접근 지연 시간이라는 새로운 과제를 제시했습니다. NUMA (Non-Uniform Memory Access) 아키텍처는 이러한 문제를 해결하기 위해 등장했으며, 각 프로세서 코어가 자체 로컬 메모리를 갖도록 설계되었습니다. 하지만 NUMA 아키텍처의 잠재력을 최대한 활용하기 위해서는 운영체제 수준에서의 적절한 제어가 필수적입니다. 바로 이 지점에서 numactl 명령어가 빛을 발합니다. 이 […]

eBPF와 bcc를 활용한 시스템 추적

최근 몇 년간 eBPF(Extended Berkeley Packet Filter)와 bcc(BPF Compiler Collection)는 시스템 엔지니어링과 성능 분석 분야에서 혁명적인 도구로 자리매김했습니다. 과거에는 커널 내부를 깊숙이 들여다보는 것이 매우 어렵고 복잡한 작업이었지만, eBPF와 bcc 덕분에 이제는 훨씬 쉽고 안전하게 시스템 동작을 관찰하고 분석할 수 있게 되었습니다. 이 글에서는 eBPF와 bcc를 활용한 시스템 추적 기술에 대해 자세히 알아보고, 실제 사용 […]