메모리 단편화와 compaction — /proc/buddyinfo로 확인하기
메모리는 넉넉히 남아 있는데 huge page나 큰 DMA 버퍼 할당이 실패하는 경우가 있다. 총 여유 메모리량과 별개로, 그 여유분이 4KB 단위로 잘게 흩어져 있으면 연속된 큰 블록이 필요한 할당은 실패한다.…
메모리는 넉넉히 남아 있는데 huge page나 큰 DMA 버퍼 할당이 실패하는 경우가 있다. 총 여유 메모리량과 별개로, 그 여유분이 4KB 단위로 잘게 흩어져 있으면 연속된 큰 블록이 필요한 할당은 실패한다.…
처음 터미널 창을 마주하면 깜빡이는 커서 앞에서 뭘 입력해야 할지부터 막막하다. 온라인 가이드마다 "터미널을 열고 이 명령을 입력하세요"라고 나오는데, 정작 경로가 뭔지, 파이프(|)가 뭔지, sudo를 왜 조심해야 하는지는 설명 없이…
메모리 사용량이 갑자기 늘면 시스템이 느려지는데 free -h로 봐도 buff/cache가 넉넉해 보여 원인을 못 짚을 때가 있다. 그 여유분을 실제로 회수해 할당 가능하게 만드는 과정이 kswapd의 페이지 회수(reclaim)인데, 회수 속도가…
Ubuntu 서버나 데스크톱을 관리하다 보면 자주 쓰는 명령어인데도 정확한 옵션이 헷갈려서 매번 man 페이지나 검색을 반복하게 되는 경우가 많다. Canonical은 시스템, 파일, 패키지, 사용자, 네트워크, LXD, Ubuntu Pro까지 자주 쓰는…
서버는 GUI 없이 최소한의 리소스로 안정적으로 돌아가야 하는데, Ubuntu Server 설치 프로그램(subiquity)은 텍스트 기반(TUI)으로 동작해 Desktop 설치보다 화면 구성이 단순하면서도 네트워크·스토리지·SSH 설정 같은 서버 운영에 필요한 옵션을 설치 단계에서 함께…
메모리가 정말 바닥나면 커널은 프로세스 하나를 희생시켜서라도 시스템 전체가 멈추는 걸 막는다. 문제는 OOM Killer가 고르는 희생양이 항상 원하는 프로세스가 아니라는 점이다 — 메모리를 많이 쓴다는 이유만으로 DB가 먼저 죽고,…
같은 서버에서 여러 서비스를 돌리다 보면 배치 작업 하나가 CPU를 독차지해 다른 서비스 응답 속도가 같이 떨어지는 경우가 생긴다. nice는 우선순위만 조정할 뿐 상한을 강제하지 못한다. cgroups v2의 cpu 컨트롤러는…
CPU 시간을 얼마나 쓸지(cpu.max/cpu.weight)와 어느 코어에서 실행될지는 별개 문제다. NUMA 지역성이 중요하거나 특정 코어를 인터럽트 처리용으로 비워둬야 한다면 사용량 제한이 아니라 실행 코어 자체를 고정해야 한다. 이 글에서는 프로세스 하나를…
이전 글에서는 smp_affinity로 IRQ를 특정 코어에 수동 고정해 쏠림을 해결했다. 그런데 코어가 수십 개고 트래픽 패턴이 계속 바뀌는 서버라면 매번 손으로 재배치하는 대신, 대부분의 배포판이 기본 설치해두는 irqbalance 데몬이 자동으로…
NIC가 패킷을 받을 때마다 매번 하드웨어 인터럽트를 걸면, 트래픽이 조금만 몰려도 CPU가 인터럽트 처리에만 매달리는 인터럽트 폭풍이 발생한다. 리눅스 네트워크 스택은 NAPI(poll 기반 수신)로 이 문제를 완화하는데, NAPI만으로는 NIC 큐가…