Top

리눅스 디버깅과 성능 튜닝 [오픈소스 도구를 사용한 문제 진단 분석과 해결]

  • 원서명Linux Debugging and Performance Tuning (ISBN 9780131492479)
  • 지은이Steve Best
  • 옮긴이이해영, 박재호
  • 감수자신재훈
  • ISBN : 8989975867
  • 25,000원
  • 2006년 02월 14일 펴냄
  • 페이퍼백 | 468쪽 | 190*250mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

커널과 응용 프로그램 모두에 적용할 수 있는 리눅스 소프트웨어 디버깅과 성능 최적화를 다루는 리눅스 문제해결 실전서의 결정판!

리눅스 커널과 응용 프로그램 생산성을 극대화하려는 모든 개발자는 물론이고, 리눅스 안정성과 성능 문제를 해결해야 하는 시스템 관리자와 지원 전문가를 위한 필독서!



이 책은 커널과 응용 프로그램 모두에 적용할 수 있는 리눅스 소프트웨어 디버깅과 성능 최적화를 다루는 결정판이다. 리눅스 코드 예제를 광범위하게 사용함으로써, 버그가 없고 튜닝이 제대로 된 코드를 만들기 위해 오픈소스 도구와 우수 개발기법을 체계적으로 소개한다.

IBM에서 보여준 뛰어난 리눅스 시스템 최적화 경험을 토대로 저자는 메모리 관리와 I/O에서 시작해 시스템 프로세스와 커널 버그 메시지에 이르기까지 다양한 분야에 걸친 실전 기법을 소개한다. 실제 디버깅 세션을 통해 가장 복잡한 응용 프로그램과 커널 관련 문제점을 디버깅하기 위한 저자의 전문가적인 노력을 느낄 수 있다. 이 책을 통해 더 빨리 병목을 찾아서 해결하기 위한 복잡한 프로파일링 기법을 익히고, 문제가 발생했을 때 올바른 자료를 찾아내는 방법을 터득하게 될 것이다.


[ 이 책에서 다루는 내용 ]

* 병목 파악 * syslog와 사건 기록
* 코드 커버리지 * 실행 추적
* 디버거: gdb, kgdb, KDB * 커널 동작 프로파일
* 메모리 관리 * 캐시 실패
* /proc 커널 자료 분석 * 사용자 모드 리눅스
* 시스템 프로세스 감시 * 동적 탐색
* 네트워크 성능 * 충돌 덤프 분석
* 웁스 버그 메시지

저자/역자 소개

[ 저자 소개 ]

스티브 베스트

스티브 베스트는 텍사스 주 오스틴에 있는 IBM의 리눅스 기술 센터(Linux Technology Center)에서 근무하고 있다. 스티브는 현재 리눅스 스토리지 관련 제품을 개발 중이며, 리눅스용 저널링 파일 시스템인 JFS(Journaled File System) 프로젝트를 이끌었다. 1999년 이후로 여러 리눅스 관련 프로젝트에 참여했으며, 파일 시스템, 국제화, 보안에 초점을 두고 운영체제 개발에 동참해왔다. 그는 수많은 잡지 기사와 발표자료의 저자이며, Performance Tuning Linux Servers(Prentice Hall PTR 2005)에서 파일 시스템 챕터를 저술하기도 했다.


[ 역자 소개 ]

박재호

포항공과대학교 컴퓨터공학과 학부와 포항공과대학교 전자계산학과 대학원(소프트웨어 공학 전공)을 졸업했다. 검색 엔진과 지식 관리 시스템으로 직장 생활을 시작해서 임베디드 장비 개발 쪽으로 방향을 바꾼 다음에 요즘에는 리눅스를 사용한 임베디드 시스템 개발에 집중하고 있다. 컴퓨터와 책 이야기를 다루는 ‘컴퓨터 vs. 책’ 블로그(http://blog.yahoo.co.kr/jhrogue)를 꾸준히 운영하고 있다. 옮긴 책으로는 <조엘 온 소프트웨어>(에이콘), <리눅스 디바이스 드라이버 개정 3판>(한빛미디어) 등이 있으며, 지은 책으로는 (한빛미디어) 등이 있다.


이해영

포항공과대학교 컴퓨터공학과 학부와 퍼듀대학교 전자계산학과 대학원을 졸업했다. 오랫동안 소프트웨어 개발에 종사하다가, 현재는 미국에 있는 소프트웨어 개발 회사에서 지역화 전문가(Localization Specialist)로 일하고 있다. 또한 저녁과 주말을 이용해, 프리랜서로 기술 서적을 번역하고 있다. 옮긴 책으로는 <조엘 온 소프트웨어>, <리눅스 디바이스 드라이버 개정 3판> 등이 있다.


[ 역자 서문 ]

디버깅과 성능 튜닝 문제는 개발자를 항상 괴롭히는 뜨거운 감자이다. 그럼에도 불구하고 전산이나 컴퓨터공학 학부에서 디버깅 101 코스를 제공하는 경우를 아직 보지 못했다. 다시 말해, 누구나 저지르는 한번씩 저지르는 실수를 시행착오를 통해 매번 다시 습득하는 운명을 받아들여야 하는 셈이다.

시간이 약이라고 경험이 쌓이다 보면 나름대로 디버깅 요령도 익히게 되고 성능 튜닝 방법에 대해 감도 잡게 된다. 하지만 만일 디버깅과 성능 튜닝에 뛰어난 선배가 하나 있어 깔끔하게 정리해놓은 노트를 여러분에게 보여준다면 어떤 기분이 들까? 아마 펄쩍 뛰며 감사히 받을 것이다. 자신이 모르는 방법은 새로 익히고 자신이 알고 있었던 방법도 다시 한번 다른 사람 관점에서 파악하는 기회가 흔치 않기 때문이다. 하지만 이제는 힘들게 선배를 찾아 다니지 않아도 된다. 지금 보고 있는 이 책이 바로 오픈소스 선배가 던져준 넝쿨 채로 굴러들어온 호박이기 때문이다.

이 책은 IBM에 근무하고 있는 스티브 베스트가 오픈소스 프로젝트로 리눅스용 신형 파일 시스템인 JFS를 개발하는 과정에서 얻은 경험을 초보자라도 이해하기 쉽게 정리한 책이다. 다시 말해, 몇 가지 공식을 나열한 다음 일반적인 내용만을 다루는 기존 디버깅 관련 서적과는 달리 오픈소스 부문에서 현장 경험이 풍부하게 녹아있는 생생한 디버깅과 성능 튜닝 기법을 지금 바로 확인할 수 있다.

이 책은 복잡하고 현학적인 용어를 사용하지 않고 평이한 용어로 실제 예를 들어 접근하기 때문에 정말 디버깅 기법을 절실하게 필요로 하는 초보 리눅스 프로그래머에게 적합한 동시에 여러 가지 다양한 디버깅 도구를 일목요연하게 정리하고 있으므로 참고 자료가 필요한 중급 프로그래머에게도 잘 어울린다. 물론 본문 중간에 논점을 흐리지 않기 위해 의도적으로 설명을 줄인 부분도 나오며 이 책을 읽을 시점에서 오픈소스 특성상 바뀐 소프트웨어 버전 탓에 본문과는 다른 내용이 나와서 당황할지도 모르지만, 책에 나온 힌트를 따라 직접 소스 코드를 뒤지거나 매뉴얼 페이지를 참조하는 수고를 통해 더 많은 지식을 얻을 수 있으리라 믿는다.

- 박재호


역자는 그림이 많은 요리책을 좋아한다. 똑같은 설명이어도 그림이 있으면 훨씬 쉽고 편하게 느껴지며, 실제로 시도해 볼 확률도 훨씬 높아진다. 그런 의미에서 이 책은 그림이 많은 요리책과도 같다. 곳곳에 담겨있는 그림과 원시 코드 예제 덕분에, 디버깅과 성능 향상이라는 고난도 요리를 누구나 맛나게 조리해 낼 수 있을 듯 하다.

저자는 소프트웨어 개발자, 시스템 관리자 등을 대상 독자로 여기고 있다. 개인적으로는 리눅스 환경에서 프로그램을 시작하는 초보 개발자들에게 적극 추천하고 싶다. 프로그래밍을 처음 배우는 과정에서 언어 문법, 자료 구조, 알고리즘만이 아니라 성능과 디버깅에 관련한 문제에도 같은 무게를 두고 배워야 한다고 생각하기 때문이다. 이 책을 통해, 초보 개발자는 나중에 어떤 문제가 골치거리가 될 수 있는지, 자신의 프로그램이 시스템에 어떤 영향을 미칠 수 있는지 등을 미리 예습할 수 있다.

또 한 가지를 덧붙이자면, 성능은 소프트웨어를 개발한 후에 해결할 문제가 아니라 요구사항 분석 단계에서부터 충분히 고려해야 하는 문제라는 사실이다. 많은 경우, 요구사항 분석에서는 소프트웨어 기능만을 열거한다. 만들어 놓고 나서 성능이 나쁘면 갑자기 `발등에 떨어진 불 끄기` 모드로 돌입한다. 결국 설계 원칙을 무시하고 코드를 변경해 버린다.

이 책에서 소개하는 도구와 방법은 단순히 이렇게 궁지에 몰린 상황만을 위해서는 아니다. 물론 이 책은 `발등에 떨어진 불 끄기`에도 매우 효과적인 방법을 소개하고 있다. 하지만 요구사항 분석 단계에서 성능 요구를 파악하고, 일정 수립 단계에서 각 개발단계 별로 성능 목표를 세우고, 설계단계에서 성능 목표를 고려하여 설계를 수행하고, 개발단계에서 단위 테스트와 디버깅으로 단계별 성능 목표를 달성하는 과정을 밟아야만 이 책에서 제시하는 도구와 방법이 진가를 발휘할 수 있다. 이 책을 읽는 독자 중 소프트웨어 개발자들은 특히 이런 점을 염두에 두었으면 좋겠다.

- 이해영


[ 감수자 소개 ]

신재훈

초등학교 교사로 아이들을 가르치는 일과 더불어 시스템 관리 업무를 맡고 있다. 네트워크 서버로 리눅스를 적극 활용하고자 애쓰고 있으며 여가 시간을 활용하여 크노픽스 리눅스 한글 프로젝트(http://knoppixko.kldp.net/)를 이끌고 있다. 학부생때 관심을 쏟기 시작한 리눅스와의 인연을 바탕으로 <레드햇 리눅스 9 네트워크 & 웹 서버 무작정 따라하기>(길벗)을 집필했으며 지금은 폐간된 리눅스 전문지 리눅스 매거진의 객원 기자로 활동한 바 있다.

목차

목차
  • 1장. 프로파일링
    • 스톱워치
    • date
    • time
    • clock
    • gettimeofday
    • GNU gprof를 이용한 성능 튜닝
    • gprof 사용에 필요한 gcc 옵션
    • kprof
  • 2장. 코드 커버리지
    • 코드 커버리지 분석이란?
    • gcov와 논리 오류
    • 코드 커버리지 유형
    • gcov 사용에 필요한 gcc 옵션
  • 3장. GNU 디버거
    • gdb 설치
    • gdb 명령
    • gdb로 디버깅할 프로그램 컴파일 방법
    • 전형적인 gdb 세션
    • 코어(core) 파일로 디버깅하기
    • 프로그램 실행과 코어 덤프 얻기
    • 그래픽 gdb 인터페이스
    • DDD(Data Display Debugger)
    • 인사이트(Insight)
    • 디버깅 심볼과 실행 파일 크기
    • 디버깅 기술
  • 4장. 메모리 관리 디버깅
    • 동적 메모리 함수
    • MEMWATCH
    • YAMD
    • Electric Fence
    • Valgrind
  • 5장. 시스템 정보
    • /proc이란?
    • 관리자 관점에서 /proc 사용하기
    • /proc 구조
  • 6장. 시스템 도구
    • 프로세스
    • 태스크 상태
    • 프로세스 디버깅 도구
    • strace로 시스템 호출 추적하기
    • 마법 키 조합으로 역추적하기
    • lsof로 열린 파일 살펴보기
    • 네크워크 디버깅 도구
  • 7장. 시스템 오류 메시지
    • 커널 파일
    • 웁스(Oops) 분석
    • ksymoops로 웁스 처리
    • gdb로 jfs_mount 보기
    • gcc –S 옵션으로 생성하는 어셈블리 코드
    • 커널 메일링 리스트 웁스
    • perror로 시스템 또는 MySQL 오류 코드 확인
  • 8장. 이벤트 로그
    • syslogd
    • 이벤트 로그
    • 이벤트 통합기 설정
  • 9장. LTT
    • 아키텍처 컴포넌트 태스크
    • 패키지와 설치
    • 커널 빌드
    • LTT 사용자-단계 도구 빌드
    • 자료 수집
    • 자료 수집 중지
    • 추적 프로세스 분석 방법
    • 자료 해석
    • 하위 디렉토리를 묶는(tar) 추적 예제
    • 자료 검토용 텍스트 도구
  • 10장. 커널이 지원하는 프로파일러 oprofile
    • 측정형 프로파일러
    • 샘플링형 프로파일러
    • 시스템 프로파일러 oprofile
    • oprofile을 위한 유틸리티
    • 일반적인 프로파일 단계
    • 단일 실행 파일의 프로파일 검토
    • 보고서 예제
    • 프로파일 자료 저장
    • 하드웨어 카운터
    • Prospect 프로파일러
  • 11장. UML
    • UML: 커널과 루트 파일 시스템 소개
    • 커널 패치와 빌드
    • 커널 빌드
    • 루트 이미지
    • 파일 시스템
    • gdb 세션 설정
    • UML 시작
    • 일반적인 gdb 세션
    • GDB 스레드 분석
    • 참고 사항
    • UML 유틸리티
  • 12장. 동적 프로브
    • Dprobes의 독특한 특징
    • 프로브를 사용하기 위한 일반적인 단계
    • Kprobes: 커널 동적 프로브
    • sys_open을 사용한 프로브 예제
    • 기본 커널 모듈을 위한 Makefile
    • 시스템에서 활동 중인 Kprobes 찾기
    • sys_open에서 오프셋 찾기
    • 점퍼 프로브
    • Kprobes 활용
    • 성공적인 Dprobes 적용 예
  • 13장. 커널 디버거
    • kgdb
    • kdb
  • 14장. 충돌 덤프
    • 커널 환경 설정
    • 커널 패치와 빌드
    • 일반적인 충돌 덤프 단계
    • LKCD 명령어
    • 시스템 패닉과 충돌 덤프 확보
    • Netdump: 클라이언트-서버 방식으로 동작하는 네트워크 충돌 덤프 기능
    • diskdump: 충돌 덤프 기능

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p140 아래에서 6행, 7행 ]
dev/fs → sys/fs

[ p142 3행, 4행 ]
/sys/kernel → sys/kernel

[ p143 7행 ]
/sys/kernel → sys/kernel

[ p144 4행 ]
/sys/kernel → sys/kernel

[ p145 1행 ]
/sys/vm → sys/vm

[ p180 5행 ]
arp명령으로 ARP(Address Resoultion Table)를 보고 변경할 수 있다.
→ arp명령으로 ARP(Address Resoultion Protocol) 테이블을 보고 변경할 수 있다.

[ p180 5-6행 ]
ARP 캐시로도 불리는 ARP는 → ARP 캐시로도 불리는 ARP 테이블은

[ p189 아래에서 5행 ]
역자주 '07_3' 삭제

[ p191 아래에서 5행 ]
/usr/src/linux/Documentation/Oops-tracing.txt
→ /usr/src/linux/Documentation/oops-tracing.txt

[ p198 아래에서 6행 ]
07_3 → 07_7

[ p210 표 ]
07_7 → 07_8
07_8 → 07_9

[ p415~416 ]
07_3 → 07_7
07_7 → 07_8
07_8 → 07_9