Skip to content

utrace 활용해보기

JMKim edited this page Aug 27, 2023 · 1 revision

hostname에 오타가 있는데, 중요한 부분이 아니니깐 무시하세요.

어디서 부터 접근해야 할까?

  • uftrace 좋다는 건 알겠는데, 도대체 이걸로 뭘 어떻게 하라는 거지?
  • PR하고 싶은데, 뭔지도 모르겠다.
  • 소스는 어디서부터 보라는거야?
  • 일단 테스트는 돌릴 수 있자나?

일단 써보자

record

여기서 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

report(tui 활용)

tui활용해서 ‘l’로 따라가 보니 깐 말도 안되는 곳에서 너무 오래 걸린다.(1초 이상 걸린다. ㄷㄷ)

‘l’은 아래와 같다.

image

  • getaddrinfo() 함수에서 말도 안되게 느리다.

image

테스트 코드 짜보자.

  • 예제 소스
    • 참고로 getaddrinfo는 hostname으로 ip를 찾아내는 함수임

[C에서 getaddrinfo 함수 사용](https://www.delftstack.com/ko/howto/c/getaddrinfo-in-c/)

  • 위 예제를 활용해서 uftrace로 확인했더니 뭐지 엄청 빠르다.

    > uftrace -la a.out localhost

image

문제가 되는 프로그램을 다시 실행해보자.

필터 기능 활용해보자(time)

  • 1초 이상 걸렸으니 깐 이놈만 보자.
# 1초 이상 걸린놈만 확인
> uftrace -la -t 1s a.out

image

  • 어? host_name이 이상하다?
    • 어디서 나온 값일까?
> hostname
ubuntu2204

image

다시 테스트 프로그램에서 확인해보자

> uftrace -la a.out ubuntu2204

image

  • 어 getaddrinfo() 함수가 느린 게 아니다.
    • hostname이 문제다.
    • hostname은 어디서 찾을까?
    • “localhost”는 왜 빠르지?

/etc/hosts 확인하자

> cat /etc/hosts

image

  • localhost는 있는데, ubuntu2204는 없네?
    • ubuntu2204 추가 해보자.

      • root 권한 필요
      > sudo vi /etc/hosts
      127.0.0.1 ubuntu2022 << 추가

다시 결과 확인하기

  • hosts에서 못 찾을 땐 1초 이상 걸리 것이 정상 동작한다.

image

결론

  • 어디서 느린지 한눈에 쉽게 보인다.
  • argument를 쉽게 볼 수 있다.
    • 디버깅이 쉽다.
  • 많이 써보자.