valgrind — 개발 환경 및 프로그래밍
최신 도구 가이드 / 개발 환경 및 프로그래밍 / valgrind.html
실행 중 프로그램의 메모리 누수와 잘못된 접근을 검사하는 메모리 디버깅 도구입니다.
기본 정보
| 프로그램 이름 | valgrind (발그라인드) |
|---|---|
| 한 줄 소개 | 실행 중 프로그램의 메모리 누수와 잘못된 접근을 검사하는 메모리 디버깅 도구입니다. |
| 개발·유지 | The Valgrind Developers |
| 공식 홈페이지 | https://valgrind.org/ |
| 공식 문서 | https://valgrind.org/docs/manual/ |
| 공식 다운로드 | https://valgrind.org/downloads/current.html |
| 지원 운영체제 | Linux (x86/AMD64/ARM/PPC 등), FreeBSD, macOS(제한적) |
| 라이선스 | GPL-2.0-or-later |
| 안정 버전 | 3.27.1 (2026-05-20 공개) — 확인일 2026-10-18 |
| GitHub 저장소 | https://sourceware.org/git/valgrind.git |
| 분류 | 개발 환경 및 프로그래밍 (태그: 메모리 누수, 메모리 검사, 프로파일링) |
이 프로그램은 무엇인가?
valgrind은 프로그램을 가상 머신 위에서 실행시키며 메모리 할당·해제·접근을 전수 검사하는 도구입니다. Memcheck 도구를 쓰면 메모리 누수, 범위를 벗어난 접근, 초기화되지 않은 값 사용 같은 문제를 실행 중에 잡아 낼 수 있습니다.
서버 프로그램이 장시간 돌면서 메모리가 계속 늘거나, 일부 환경에서만 죽는 문제를 추적할 때 사용합니다. 실행이 수십 배 느려지는 대신 정적 검사로는 잡기 어려운 동적 메모리 오류를 발견할 수 있습니다.
어떤 문제를 해결하는가?
- 서비스가 장시간 돌면서 메모리가 꾸준히 늘어날 때 (누수 추적).
- 재현이 어려운 세그먼테이션 폴트·예기치 않은 종료 원인을 찾을 때.
- 새로 만든 C·C++ 모듈의 메모리 안전성을 배포 전에 점검할 때.
- 캐시 무효화·성능 저하 원인으로 의심되는 과도한 메모리 접근을 확인할 때.
주요 기능
Memcheck (메모리 검사)
할당·해제·읽기·쓰기를 추적해 누수와 오류 접근을 보고합니다.
- 활용 상황: 테스트 시나리오를 valgrind로 한 번 돌립니다.
- 얻는 결과: 오류 위치(파일·라인·호출 스택)를 얻습니다.
- 제한 사항: 실행이 크게 느려지고 다중 스레드 프로그램은 부하가 커집니다.
누수 리포트
프로그램 종료 시 미해제 메모리와 그가 할당된 지점을 보고합니다.
- 활용 상황: 야간 배치 작업의 누수 여부를 점검합니다.
- 얻는 결과: 누수 의심 지점 목록과 크기 정보를 얻습니다.
- 제한 사항: 정당한 전역 캐시는 '실유형 누수'로 과잉 보고될 수 있습니다.
Cachegrind·Callgrind
CPU 캐시 사용·함수 호출 비용을 프로파일링합니다.
- 활용 상황: 성능 병목 함수를 찾습니다.
- 얻는 결과: 함수별 추정 명령 수·캐시 미스를 얻습니다.
- 제한 사항: 실측 타이밍과는 차이가 있어 참고용입니다.
Helgrind·DRD
다중 스레드 프로그램의 경쟁 조건·데드락을 검사합니다.
- 활용 상황: 스레드 오류 재현 시 원인 단서를 얻습니다.
- 얻는 결과: 경쟁이 의심되는 공유 자원 접근을 보고합니다.
- 제한 사항: 오탐이 있어 결과 해석 경험이 필요합니다.
설치 및 실행
Ubuntu / Debian
배포판 저장소에서 설치합니다.
sudo apt update
sudo apt install valgrind
RHEL / CentOS / Fedora
기본 저장소에서 설치합니다.
sudo dnf install valgrind
버전 확인
설치된 버전을 확인합니다.
valgrind --version
실제 사용 예제
Memcheck로 실행
프로그램을 Memcheck 아래에서 실행합니다.
valgrind --leak-check=full ./app-server --once
요약 보고
누수 요약만 보고 싶을 때 leak-check를 summary로 제한합니다.
valgrind --leak-check=summary ./batch-job
호출 프로파일 (예시)
Callgrind로 함수별 비용을 뽑습니다. 출력은 예시입니다.
valgrind --tool=callgrind ./app-server --once
장점과 한계
장점
- 소스 변경 없이 바이너리만으로 메모리 오류를 검사할 수 있습니다.
- 오류 지점을 호출 스택까지 상세히 보고합니다.
- Linux 대부분의 배포판 저장소에 포함되어 설치가 쉽습니다.
- Memcheck 외에도 프로파일링·스레드 검사 도구를 함께 제공합니다.
사용 전에 고려할 점
- 실행 속도가 크게 느려져 대규모 테스트에는 그대로 쓰기 어렵습니다.
- 멀티스레드 대용량 서비스는 부하·오탐 문제가 있어 부분 적용이 필요합니다.
- macOS·일부 아키텍처 지원이 제한적입니다.
- 전역 캐시성 할당은 누수로 과잉 보고될 수 있어 결과 해석이 필요합니다.
비슷한 프로그램과 비교
| 프로그램 | 특징 | 이런 경우에 적합 |
|---|---|---|
| AddressSanitizer | 컴파일 시 계측으로 valgrind보다 빠르게 메모리 오류를 잡습니다. | 테스트 빌드에 계측을 넣을 수 있을 때. |
| gdb | 정확한 재현 지점에서 변수를 직접 검사합니다. | 재현되는 크래시의 상태를 상세히 봐야 할 때. |
| heaptrack | 할당 프로파일링에 특화된 GUI 리포트를 제공합니다. | 메모리 사용 패턴을 그래프로 분석할 때. |
공식 자료 및 추가 학습
- 공식 홈페이지 — https://valgrind.org/
- 공식 문서 / 지식베이스 — https://valgrind.org/docs/manual/
- 공식 다운로드 — https://valgrind.org/downloads/current.html
- 릴리스 노트 — https://valgrind.org/info/news.html
- 소스 / 개발 자료 — https://sourceware.org/git/valgrind.git
버전·지원 환경 정보는 2026-10-18 기준으로 공식 사이트에서 확인한 값입니다. 설치 명령은 사용하는 배포판과 버전에 따라 달라질 수 있으므로 공식 설치 문서를 함께 확인하세요.
실제 실행 화면
valgrind Memcheck의 누수 요약 리포트 화면을 서버 풍으로 재구성한 합성 예시입니다. 화면은 합성 예시이며 실제 실행 결과가 아닙니다.

실제 운영 중인 서버
이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.