You are looking for information, articles, knowledge about the topic nail salons open on sunday near me strace 사용법 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: strace 사용법 리눅스 strace 설치, Strace Linux, 윈도우 strace, Man strace, Linux trace
안녕.. 타코’s 리눅스 블로그 :: [HowTo] 리눅스에서 Strace를 이용한 7가지 디버깅 예제
- Article author: linuxspot.tistory.com
- Reviews from users: 25686 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about 안녕.. 타코’s 리눅스 블로그 :: [HowTo] 리눅스에서 Strace를 이용한 7가지 디버깅 예제 다음 예제는 리눅스 명령어인 “ls”에 대한 strace 결과를 보여줍니다. … 아래와 같이 -e 옵션을 사용하면 특정 시스템 콜만 볼 수 있습니다. …
- Most searched keywords: Whether you are looking for 안녕.. 타코’s 리눅스 블로그 :: [HowTo] 리눅스에서 Strace를 이용한 7가지 디버깅 예제 다음 예제는 리눅스 명령어인 “ls”에 대한 strace 결과를 보여줍니다. … 아래와 같이 -e 옵션을 사용하면 특정 시스템 콜만 볼 수 있습니다. 이 페이지의 원문은 The Geek Stuff에 포스팅 된 “7 Strace Examples to Debug the Execution of a Program in Linux” 입니다. strace는 프로그램의 문제 해결을 도와주는 디버깅 툴입니다. strace는 특정 프로그..
- Table of Contents:
마법의 도구 strace
- Article author: brunch.co.kr
- Reviews from users: 18403 Ratings
- Top rated: 4.9
- Lowest rated: 1
- Summary of article content: Articles about 마법의 도구 strace Linux Performance | 오늘 다룰 주제는 Linux에서 제공하는 최강의 디버깅 도구 중에 하나인 strace입니다. strace를 사용하는 방법과 활용하는 방법 … …
- Most searched keywords: Whether you are looking for 마법의 도구 strace Linux Performance | 오늘 다룰 주제는 Linux에서 제공하는 최강의 디버깅 도구 중에 하나인 strace입니다. strace를 사용하는 방법과 활용하는 방법 … Linux Performance | 오늘 다룰 주제는 Linux에서 제공하는 최강의 디버깅 도구 중에 하나인 strace입니다. strace를 사용하는 방법과 활용하는 방법에 대해서 간단하게 다뤄보겠습니다. 사실 너무나도 많은 영역에 사용될 수 있어서, 오늘 다루게 되는 내용은 아주 기초적인 내용에 불과할 겁니다. 이 내용을 바탕으로 다양한 문제 해결에 도움이 되었으면 합니다.strace
- Table of Contents:
[LINUX] strace 시스템 콜 추적하기
- Article author: mozi.tistory.com
- Reviews from users: 38020 Ratings
- Top rated: 3.8
- Lowest rated: 1
- Summary of article content: Articles about [LINUX] strace 시스템 콜 추적하기 strace 특정 프로그램의 시스템 콜과 시그널을 추적하는 프로그램 입니다. strace 사용방법 추적을 위해 인자로 커맨드 혹은 프로세스 아이디를 … …
- Most searched keywords: Whether you are looking for [LINUX] strace 시스템 콜 추적하기 strace 특정 프로그램의 시스템 콜과 시그널을 추적하는 프로그램 입니다. strace 사용방법 추적을 위해 인자로 커맨드 혹은 프로세스 아이디를 … strace 특정 프로그램의 시스템 콜과 시그널을 추적하는 프로그램 입니다. strace 사용방법 추적을 위해 인자로 커맨드 혹은 프로세스 아이디를 주어서 조회할 수 있습니다. 사용 방법 커맨드 $ strace COMM..’DBA 업무’와
‘알게되는 정보’를 기록하는 공간 - Table of Contents:
티스토리툴바
strace 사용법 : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 16488 Ratings
- Top rated: 4.0
- Lowest rated: 1
- Summary of article content: Articles about strace 사용법 : 네이버 블로그 strace를 잘 사용한다면 많은 난제들을 쉽게 해결할 수 있으리라 생각됩니다. strace는 시스템 콜과 시그널을 추적하는 프로그램이며 프로그램의 문제 … …
- Most searched keywords: Whether you are looking for strace 사용법 : 네이버 블로그 strace를 잘 사용한다면 많은 난제들을 쉽게 해결할 수 있으리라 생각됩니다. strace는 시스템 콜과 시그널을 추적하는 프로그램이며 프로그램의 문제 …
- Table of Contents:
카테고리 이동
시스템
이 블로그
ETC
카테고리 글
카테고리
이 블로그
ETC
카테고리 글
strace를 ì´ì©í system call tracing
- Article author: www.joinc.co.kr
- Reviews from users: 39567 Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about strace를 ì´ì©í system call tracing strace의 사용방법은 다음과 같다. 1. 2. 3. 4. 5. …
- Most searched keywords: Whether you are looking for strace를 ì´ì©í system call tracing strace의 사용방법은 다음과 같다. 1. 2. 3. 4. 5. strace를 ì´ì©í system call tracing :
- Table of Contents:
strace 사용법
- Article author: onlybible.tistory.com
- Reviews from users: 38464 Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about strace 사용법 strace란 무엇인가 ? strace는 프로그램이 실행될동안 호출하는 시스템콜을 추적할 수 있는 툴 이다. 여기에 더불어 프로세스가 받은 signal에 대한 정보 … …
- Most searched keywords: Whether you are looking for strace 사용법 strace란 무엇인가 ? strace는 프로그램이 실행될동안 호출하는 시스템콜을 추적할 수 있는 툴 이다. 여기에 더불어 프로세스가 받은 signal에 대한 정보 … Clipped from: www.joinc.co.kr (share this clip) strace 리눅스상에서 작동하는 C 코드들은 모두 시스템콜을 주어진 임무를 수행한다. 그러므로 프로그램의 시스템콜이 호출되는 것을 추적할 수 있다면, 프로그..
- Table of Contents:
strace
‘서버관리’ Related Articles
공지사항
최근 포스트
태그
검색
전체 방문자
strace 사용법
- Article author: shumin.co.kr
- Reviews from users: 7532 Ratings
- Top rated: 3.6
- Lowest rated: 1
- Summary of article content: Articles about strace 사용법 [Linux] strace 사용법 … 특정 프로그램의 system call과 signal을 추적하는데 활용되는 프로그램이다. 1. 사용법. 반드시 옵션이 명령어 또는 실행파일 … …
- Most searched keywords: Whether you are looking for strace 사용법 [Linux] strace 사용법 … 특정 프로그램의 system call과 signal을 추적하는데 활용되는 프로그램이다. 1. 사용법. 반드시 옵션이 명령어 또는 실행파일 … Clipped from: www.joinc.co.kr (share this clip) strace 리눅스상에서 작동하는 C 코드들은 모두 시스템콜을 주어진 임무를 수행한다. 그러므로 프로그램의 시스템콜이 호출되는 것을 추적할 수 있다면, 프로그..
- Table of Contents:
strace
‘서버관리’ Related Articles
공지사항
최근 포스트
태그
검색
전체 방문자
strace 사용 | Android 오픈소스 프로젝트 | Android Open Source Project
- Article author: source.android.com
- Reviews from users: 6598 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about strace 사용 | Android 오픈소스 프로젝트 | Android Open Source Project strace 사용 · 이 페이지의 내용 · Strace 빌드 · 실행 중인 프로세스에 연결 · 애플리케이션에 사용 · Zygote에 사용 · Andro 부팅 도중 strace 로그 가져 … …
- Most searched keywords: Whether you are looking for strace 사용 | Android 오픈소스 프로젝트 | Android Open Source Project strace 사용 · 이 페이지의 내용 · Strace 빌드 · 실행 중인 프로세스에 연결 · 애플리케이션에 사용 · Zygote에 사용 · Andro 부팅 도중 strace 로그 가져 …
- Table of Contents:
strace 빌드
실행 중인 프로세스에 연결
애플리케이션에 사용
zygote에 사용
Android 부팅 도중 strace 로그 가져오기
strace가 -k 옵션을 만난 날 – 넷마블 기술 블로그
- Article author: netmarble.engineering
- Reviews from users: 23471 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about strace가 -k 옵션을 만난 날 – 넷마블 기술 블로그 strace는 리눅스에서 서버 병목을 확인할 수 있도록, 시스템 콜(시스템 호출, System call)을 측정하는 툴입니다. strace를 활용하면, 리눅스 커널과 … …
- Most searched keywords: Whether you are looking for strace가 -k 옵션을 만난 날 – 넷마블 기술 블로그 strace는 리눅스에서 서버 병목을 확인할 수 있도록, 시스템 콜(시스템 호출, System call)을 측정하는 툴입니다. strace를 활용하면, 리눅스 커널과 … strace는 리눅스에서 서버 병목을 확인할 수 있도록, 시스템 콜(시스템 호출, System call)을 측정하는 툴입니다. strace를 활용하면, 리눅스 커널과 프로세스 사이에서 발생하는 시스템 콜, 시그널 전달(Signal deliveries), 프로세스 상태 변화…
- Table of Contents:
-k가 없다
strace 재빌드 확인
Linux strace :: Las 낙서장
- Article author: lascrea.tistory.com
- Reviews from users: 31151 Ratings
- Top rated: 3.5
- Lowest rated: 1
- Summary of article content: Articles about Linux strace :: Las 낙서장 strace 란? – 어플리케이션이 사용하는 system call과 signal등을 추적하여 성능 저하를 일으키는 부분이 없는지, 에러가 나는 부분이 없는지를 확인 … …
- Most searched keywords: Whether you are looking for Linux strace :: Las 낙서장 strace 란? – 어플리케이션이 사용하는 system call과 signal등을 추적하여 성능 저하를 일으키는 부분이 없는지, 에러가 나는 부분이 없는지를 확인 … strace 란? – 어플리케이션이 사용하는 system call과 signal등을 추적하여 성능 저하를 일으키는 부분이 없는지, 에러가 나는 부분이 없는지를 확인하는데 사용하는 디버깅 툴 옵션 -s : 추적할때 화면 혹은 파일..
- Table of Contents:
Linux strace
티스토리툴바
See more articles in the same category here: Chewathai27.com/to/blog.
안녕.. 타코’s 리눅스 블로그 :: [HowTo] 리눅스에서 Strace를 이용한 7가지 디버깅 예제
1. 바이너리 추적하기
$ strace ls
execve(“/bin/ls”, [“ls”], [/* 21 vars */]) = 0
brk(0) = 0x8c31000
access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78c7000
access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=65354, …}) = 0
…
…
…
2. -e 옵션을 사용해 특정 시스템 콜 추적하기
$ strace -e open ls
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libselinux.so.1”, O_RDONLY) = 3
open(“/lib/librt.so.1”, O_RDONLY) = 3
open(“/lib/libacl.so.1”, O_RDONLY) = 3
open(“/lib/libc.so.6”, O_RDONLY) = 3
open(“/lib/libdl.so.2”, O_RDONLY) = 3
open(“/lib/libpthread.so.0”, O_RDONLY) = 3
open(“/lib/libattr.so.1”, O_RDONLY) = 3
open(“/proc/filesystems”, O_RDONLY|O_LARGEFILE) = 3
open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
open(“.”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
Desktop Documents Downloads examples.desktop libflashplayer.so
Music Pictures Public Templates Ubuntu_OS Videos
$ strace -e trace=open,read ls /home
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libselinux.so.1”, O_RDONLY) = 3
read(3, “\177ELF\1\1\1\3\3\1\260G004″…, 512) = 512
open(“/lib/librt.so.1”, O_RDONLY) = 3
read(3, “\177ELF\1\1\1\3\3\1\300\30004″…, 512) = 512
..
open(“/lib/libattr.so.1”, O_RDONLY) = 3
read(3, “\177ELF\1\1\1\3\3\1\360\r004″…, 512) = 512
open(“/proc/filesystems”, O_RDONLY|O_LARGEFILE) = 3
read(3, “nodev\tsysfs
nodev\trootfs
nodev\tb”…, 1024) = 315
read(3, “”, 1024) = 0
open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
open(“/home”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
bala
3. -o 옵션을 사용해 결과를 파일에 저장하기
$ strace -o output.txt ls
Desktop Documents Downloads examples.desktop libflashplayer.so
Music output.txt Pictures Public Templates Ubuntu_OS Videos
$ cat output.txt
execve(“/bin/ls”, [“ls”], [/* 37 vars */]) = 0
brk(0) = 0x8637000
access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7860000
access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=67188, …}) = 0
…
…
4. -p 옵션을 사용해 실행 중인 리눅스 프로세스에 strace 실행시키기
$ ps -C firefox-bin
PID TTY TIME CMD
1725 ? 00:40:50 firefox-bin
$ sudo strace -p 1725 -o firefox_trace.txt
$ tail -f firefox_trace.txt
$ strace -p 1725 -o output.txt
attach: ptrace(PTRACE_ATTACH, …): Operation not permitted
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
5. -t 옵션을 사용해 각 Trace에 대한 시간 정보 출력하기
$ strace -t -e open ls /home
20:42:37 open(“/etc/ld.so.cache”, O_RDONLY) = 3
20:42:37 open(“/lib/libselinux.so.1”, O_RDONLY) = 3
20:42:37 open(“/lib/librt.so.1”, O_RDONLY) = 3
20:42:37 open(“/lib/libacl.so.1”, O_RDONLY) = 3
20:42:37 open(“/lib/libc.so.6”, O_RDONLY) = 3
20:42:37 open(“/lib/libdl.so.2”, O_RDONLY) = 3
20:42:37 open(“/lib/libpthread.so.0”, O_RDONLY) = 3
20:42:37 open(“/lib/libattr.so.1”, O_RDONLY) = 3
20:42:37 open(“/proc/filesystems”, O_RDONLY|O_LARGEFILE) = 3
20:42:37 open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
20:42:37 open(“/home”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
bala
6. -r 옵션을 사용해 시스템 콜의 상대 시간 정보 출력하기
$ strace -r ls
0.000000 execve(“/bin/ls”, [“ls”], [/* 37 vars */]) = 0
0.000846 brk(0) = 0x8418000
0.000143 access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)
0.000163 mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb787b000
0.000119 access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)
0.000123 open(“/etc/ld.so.cache”, O_RDONLY) = 3
0.000099 fstat64(3, {st_mode=S_IFREG|0644, st_size=67188, …}) = 0
0.000155 mmap2(NULL, 67188, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb786a000
…
…
7. -c 옵션을 사용해 시스템 콜 통계 정보 생성하기
$ strace -c ls /home
bala
% time seconds usecs/call calls errors syscall
—— ———– ———– ——— ——— —————-
-nan 0.000000 0 9 read
-nan 0.000000 0 1 write
-nan 0.000000 0 11 open
-nan 0.000000 0 13 close
-nan 0.000000 0 1 execve
-nan 0.000000 0 9 9 access
-nan 0.000000 0 3 brk
-nan 0.000000 0 2 ioctl
-nan 0.000000 0 3 munmap
-nan 0.000000 0 1 uname
-nan 0.000000 0 11 mprotect
-nan 0.000000 0 2 rt_sigaction
-nan 0.000000 0 1 rt_sigprocmask
-nan 0.000000 0 1 getrlimit
-nan 0.000000 0 25 mmap2
-nan 0.000000 0 1 stat64
-nan 0.000000 0 11 fstat64
-nan 0.000000 0 2 getdents64
-nan 0.000000 0 1 fcntl64
-nan 0.000000 0 2 1 futex
-nan 0.000000 0 1 set_thread_area
-nan 0.000000 0 1 set_tid_address
-nan 0.000000 0 1 statfs64
-nan 0.000000 0 1 set_robust_list
—— ———– ———– ——— ——— —————-
100.00 0.000000 114 10 total
이 페이지의 원문은 The Geek Stuff 에 포스팅 된 “7 Strace Examples to Debug the Execution of a Program in Linux” 입니다.strace는 프로그램의 문제 해결을 도와주는 디버깅 툴입니다. strace는 특정 프로그램의 시스템 콜과 시그널을 감시하는데, 프로그램 소스 코드를 갖고 있지 않거나, 프로그램의 시작에서 종료될 때까지의 실행 시퀀스를 디버깅할 때 유용하게 사용할 수 있습니다.이 문서에서는 7가지의 strace 예제를 소개합니다.strace 명령어를 이용하면 (실행 가능한)바이너리를 추적할 수 있습니다. 다음 예제는 리눅스 명령어인 “ls”에 대한 strace 결과를 보여줍니다.strace는 기본적으로 주어진 바이너리의 모든 시스템 콜을 보여줍니다. 아래와 같이 -e 옵션을 사용하면 특정 시스템 콜만 볼 수 있습니다.위 결과는 ls 명령어에 대한 open 시스템 콜만 출력하는 것을 보여줍니다. 출력의 마지막 부분에 ls 명령어의 결과도 출력되는 것을 볼 수 있습니다.”-e trace=” 옵션을 사용하면 여려 개의 시스템 콜을 출력할 수 있습니다. 다음 예제는 open과 read 시스템 콜 추적을 보여줍니다.다음 예제는 strace 결과를 output.txt 파일에 저장하는 것을 보여줍니다.프로세스 ID를 사용해 이미 실행 중인 프로그램에 strace를 실행 시킬 수 있습니다. 우선, ps 명령어를 사용해 프로그램의 PID를 알아냅니다.예를 들어, 현재 실행 중인 파이어폭스 프로그램을 추적하길 원한다면 다음과 같이 파이어폭스 프로그램의 PID를 먼저 알아내야 됩니다.알아낸 프로세스 ID에 strace를 적용하기 위해 다음과 같이 -p 옵션을 사용합니다.이제 파이어폭스 프로세스의 strace가 실행되고, 결과는 firefox_trace.txt 파일에 저장 됩니다. 이 파일에 tail 명령어를 이용하면 파이어폭스의 추적 정보를 살펴볼 수 있습니다.주어진 프로세스에 대한 UID가 현재 사용자의 UID와 매칭되지 않으면 다음과 같은 에러가 발생됩니다.다음과 같이 -t 옵션을 사용해 strace의 라인 별 시간 정보를 출력할 수 있습니다.strace는 -r 옵션을 사용해 아래와 같은 시스템 콜의 실행 시간을 출력할 수 있습니다.strace에 “-c” 옵션을 사용하면 유용한 통계 정보를 제공받을 수 있습니다. 아래의 “calls” 열은 특정 시스템 콜이 얼마나 많이 실행됐는지를 나타냅니다.
마법의 도구 strace
오늘 다룰 주제는 Linux에서 제공하는 최강의 디버깅 도구 중에 하나인 strace입니다. strace를 사용하는 방법과 활용하는 방법에 대해서 간단하게 다뤄보겠습니다. 사실 너무나도 많은 영역에 사용될 수 있어서, 오늘 다루게 되는 내용은 아주 기초적인 내용에 불과할 겁니다. 이 내용을 바탕으로 다양한 문제 해결에 도움이 되었으면 합니다.
strace 사용 방법
man 페이지를 보면 아래와 같이 나와 있습니다.
strace – trace system calls and signals
네. 맞습니다.
strace는 애플리케이션들이 사용하는 system call과 signal 등을 추적해서 성능 저하를 일으키는 부분은 없는지, 에러가 나는 부분은 없는지를 확인하는데 사용하는 디버깅 툴입니다.
여러 가지 옵션이 있지만 반드시 사용해야 하는 옵션들은 아래와 같습니다.
-s strsize Specify the maximum string size to print (the default is 32).
strace를 통해 추적할 때 화면 혹은 파일에 뿌려 줄 문자열에 대한 최댓값을 설정해 줍니다. 이 값을 디폴트 값으로 사용하면 strace를 떠 놓고도 많은 부분이 잘려서 제대로 확인을 할 수 없는 상태가 됩니다.
-s 옵션이 없을 때, 끝이 … 으로 잘린 것을 볼 수 있다.
-f Trace child processes
여러 개의 워크 프로세스 혹은 워커 스레드를 만들어서 사용하는 애플리케이션을 추적할 때에는 -f 옵션이 필수입니다. 그렇지 않으면 아무 작업도 하지 않는 마스터 프로세스만 추적이 될 수 있습니다.
-t Prefix each line of the trace with the time of day.
시스템 콜 간의 소요 시간 등을 측정하기 위해서는 추적하는 동안 타임 스탬프를 찍는 것이 필수입니다.
-p pid Attach to the process with the process ID pid
-p 옵션을 통해 추적하려는 프로세스의 pid를 입력해 주어야 추적이 시작됩니다. 이미 생성되어 있는 프로세스를 pid를 통해 추적할 수도 있고 뒤에 직접 커맨드를 넣어서 추적할 수도 있습니다.
그래서 완성된 명령은 아래와 같은 형태를 띱니다.
strace -s 65535 -f -t -o strace_dump -p
hostname 명령 추적해 보기
그럼 간단하게 사용법을 알아 봤으니 실제로 어떻게 활용할 수 있는지 살펴보겠습니다. 간단하게 hostname이라는 리눅스 명령을 추적해 보면서 살펴보겠습니다.
혹시 hostname 명령 중에 -f 옵션과 -A 옵션의 차이를 아시나요? 둘 다 FQDN을 보여준다고는 하는데, 왜 두 개의 옵션이 따로 있는 걸까요? 이 차이점을 strace를 통해서 살펴보겠습니다.
strace -s 65535 -f -t -o strace_dump_1 hostname -f
생성된 파일 strace_dump_1을 살펴보겠습니다.
strace_dum_1 파일의 1~9번째 줄
상단 내용을 보시면 execve라는 시스템 콜을 통해서 새로운 프로세스를 만들고 명령을 실행하는 것을 볼 수 있습니다. shell에서 명령을 입력하면 fork를 통해서 새로운 프로세스가 만들어진다는 것을 확인할 수 있는 줄입니다. 그리고 필요로 하는 라이브러리들을 찾아서 open 등의 시스템 콜을 통해서 읽고 있습니다.
/etc/resolv.conf 파일을 읽는 부분
hostname 명령은 서버의 호스트명을 읽어오는 명령이기 때문에 당연히 /etc/resolv.conf를 읽게 됩니다. strace를 통해서 이런 과정을 직접 확인할 수 있습니다.
도메인 서버에 질의 하는 과정
이 부분이 가장 핵심인데요, 107번째 줄에 보시면 도메인 질의를 하기 위해 소켓을 만드는 것을 볼 수 있습니다. 그리고 108번째 줄에서 도메인 서버와 connect 함수로 연결을 요청하고요, 110번 줄에서 도메인 질의를 하는 것을 볼 수 있습니다. 내용을 자세히 보시면 server.example.com이라는 호스트가 있는지를 묻고 있습니다. example.com 은 /etc/resolv.conf 파일에 있는 search 지시자 안에 있는 도메인입니다.
그리고 113번 줄에는 도메인 서버로부터의 응답을 받는 것을 확인할 수 있습니다. 그리고 이런 식으로 /etc/resolv.conf에 있는 search 지시자를 붙여서 도메인 서버에 계속 질의하는 것을 볼 수 있습니다.
즉, hostname -f 명령은 search 지시자에 자신의 호스트명을 붙여서 도메인 서버에 질의를 하고 이에 대한 응답을 받아서 사용자에게 보여 주는 것임을 확인할 수 있습니다.
그럼 이번에는 hostname -A 명령을 살펴보겠습니다.
strace -s 65535 -f -t -o strace_dump_2 hostname -A
hostname -A에 대한 strace 결과
116번 줄을 보시면 역시 -f 때와 마찬가지로 소켓을 여는 것을 볼 수 있습니다. 중요한 차이점은 119번 줄에서 볼 수 있는데요, -f 옵션과 달리 리버스 도메인 질의를 하는 것을 볼 수 있습니다. 잘린 부분은 IP 노출 때문에 제가 임의로 잘랐는데요 ^^; 뒤에 보시면 in-addr.arpa로 메시지를 보내는 것을 볼 수 있습니다. -f는 search 지시자를 붙여서 도메인 질의를 했다면 -A 옵션은 IP를 가지고 리버스 도메인 질의를 하는 것을 볼 수 있습니다.
이렇게 비슷해 보이는 기능이지만 strace를 통해 확인해 보면 전혀 동작 원리가 다른 명령임을 알 수 있습니다.
Case study
이번엔 실제로 발생했던 문제를 strace를 통해 어떻게 확인하고 수정할 수 있는지 살펴보겠습니다.
지난번 글에서 언급했던 nginx upstream keepalive를 기억하시나요? ^^ 관련해서 발생했던 이슈 중 하나인데, 증상은 nginx upstream keepalive를 적용했음에도 불구하고 내부 통신에서 TIME_WAIT 소켓이 다수 발생하는 증상 이었습니다.
이를 추적하기 위해 strace를 사용해 봤습니다.
우선 nginx 프로세스에 대해 strace를 걸었습니다.
strace 결과
5번에 보시면 사용자로부터의 GET 요청을 nginx가 받았음을 볼 수 있습니다. 그리고 play로 넘겨주기 위해서 내부 소켓을 만들고요 (7번 줄), connect 시스템 콜을 통해 play 에 접속하고 있습니다. (10번 줄).
그 후에 사용자의 GET 요청을 그대로 프록싱 해 주고 있고요 (14번 줄), 16번 줄에서 정상적으로 응답을 받아서 돌려 주고 있습니다. 그런데, 18번 줄을 잘 보시면 바로 close()를 호출하고 있습니다. FD가 5번인데 5번은 nginx에서 play로 데이터를 넘겨주기 위해 생성한 로컬 포트입니다. (7번 줄에 socket 함수의 리턴 값이 5 임을 통해 알 수 있습니다.)
아.. 분명 14번 줄을 보면 HTTP/1.1로 요청하는 것을 확인했는데 왜 끊어질까요? play의 버그일까요? 아닙니다. 16번 줄의 응답 내용을 잘 보면 Connection: close라는 헤더가 내려 오는 것을 볼 수 있습니다. play에서 임의로 헤더 값을 수정해서 close로 내려주었기 때문에 nginx에서는 먼저 연결을 끊을 수밖에 없었습니다.
네 사실 이 이슈는 tcpdump를 통해서 확인하는 것이 더 빠를 수 있습니다. (내부 통신이기 때문에 -i any 옵션을 반드시 붙여야 합니다.) 다만 이 글에서 strace를 활용하는 방법을 보여 드리기 위해 strace를 사용해 봤습니다. ^^
두 가지 예제를 통해서 strace를 사용하는 방법을 살펴봤습니다.
그리 문법이 복잡하지 않고 사용법이 까다롭지 않기 때문에 strace는 시스템 엔지니어가 반드시 익혀 두어야 할 필수 도구 중에 하나라고 생각합니다.
또한 디버깅할 때뿐 아니라 애플리케이션이 동작하는 내부 원리나 구조를 파악하는 데에도 많은 도움이 됩니다. 물론 내부 로직까지는 확인할 수 없지만, 소켓을 열 때 어떤 옵션을 사용하는지 (setsockopt), 연결 맺기와 끊기는 잘 되는지 (connect, close) , 정상적으로 컨피그 파일을 잘 읽는지 (access, read) 등의 확인을 통해서 간단하게나마 애플리케이션의 구조를 파악하는데 도움이 됩니다.
긴 글 읽어 주셔서 감사합니다.
[LINUX] strace 시스템 콜 추적하기
strace
특정 프로그램의 시스템 콜과 시그널을 추적하는 프로그램 입니다.
strace 사용방법
추적을 위해 인자로 커맨드 혹은 프로세스 아이디를 주어서 조회할 수 있습니다.
사용 방법 커맨드 $ strace COMMAND 프로세스 아이디 $ strace -p PID
strace 예제
아래 상황은 glsnr 프로그램에 시그널을 보냈을 때, strace 출력물에 나오는 내용입니다.
상황 표준출력 1. 특정 프로그램의 PID 조회 $ ps -C glsnr PID TTY TIME CMD 5289 ? 00:00:00 glsnr 2. strace -p PID 로 추적 시작 $ nohup strace -p 5289 & 3. 프로그램에 시그널 전송 $ kill -12 5289 4. strace 에 나오는 내용 조회 … epoll_wait(3, 158f3c0, 2, 1000) = -1 EINTR (Interrupted system call) — SIGUSR2 {si_signo=SIGUSR2, si_code=SI_USER, si_pid=5423, si_uid=1000} —
strace 옵션
옵션 설명 -o FILENAME 나오는 결과를 파일로 기록 -c 각각의 시스템 콜에 대한 개수를 출력 -f 추적 중인 프로세스가 fork 한 자식 프로세스도 추적 -t 줄마다, 기록된 시간을 출력 -p PID 명령어가 아니라 PID 로 추적 현재 실행중인 프로그램을 추적할 때 유용
So you have finished reading the strace 사용법 topic article, if you find this article useful, please share it. Thank you very much. See more: 리눅스 strace 설치, Strace Linux, 윈도우 strace, Man strace, Linux trace