forked from namhyung/uftrace
-
Notifications
You must be signed in to change notification settings - Fork 0
utrace 활용해보기
JMKim edited this page Aug 27, 2023
·
1 revision
hostname에 오타가 있는데, 중요한 부분이 아니니깐 무시하세요.
- uftrace 좋다는 건 알겠는데, 도대체 이걸로 뭘 어떻게 하라는 거지?
- PR하고 싶은데, 뭔지도 모르겠다.
- 소스는 어디서부터 보라는거야?
- 일단 테스트는 돌릴 수 있자나?
여기서 a.out은 회사 소스 컴파일해서 돌려본 것으로 a.out은 가상임
> uftrace record -la a.out
# -la 붙이면 library따라가면서 arguments도 보여준다니깐 -la를 붙여서 해보자.
-l, --nest-libcall Show nested library calls
-a, --auto-args Show arguments and return value of known functions
tui활용해서 ‘l’로 따라가 보니 깐 말도 안되는 곳에서 너무 오래 걸린다.(1초 이상 걸린다. ㄷㄷ)
‘l’은 아래와 같다.
- getaddrinfo() 함수에서 말도 안되게 느리다.
- 예제 소스
- 참고로 getaddrinfo는 hostname으로 ip를 찾아내는 함수임
[C에서 getaddrinfo 함수 사용](https://www.delftstack.com/ko/howto/c/getaddrinfo-in-c/)
-
위 예제를 활용해서 uftrace로 확인했더니 뭐지 엄청 빠르다.
> uftrace -la a.out localhost
- 1초 이상 걸렸으니 깐 이놈만 보자.
# 1초 이상 걸린놈만 확인
> uftrace -la -t 1s a.out
- 어? host_name이 이상하다?
- 어디서 나온 값일까?
> hostname
ubuntu2204
> uftrace -la a.out ubuntu2204
- 어 getaddrinfo() 함수가 느린 게 아니다.
- hostname이 문제다.
- hostname은 어디서 찾을까?
- “localhost”는 왜 빠르지?
> cat /etc/hosts
- localhost는 있는데, ubuntu2204는 없네?
-
ubuntu2204 추가 해보자.
- root 권한 필요
> sudo vi /etc/hosts 127.0.0.1 ubuntu2022 << 추가
-
- hosts에서 못 찾을 땐 1초 이상 걸리 것이 정상 동작한다.
- 어디서 느린지 한눈에 쉽게 보인다.
- argument를 쉽게 볼 수 있다.
- 디버깅이 쉽다.
- 많이 써보자.