나는 프로그램을 호출하는 모든 기능을 인쇄하기 위해 stap
을 사용하려고합니다. 나는 몇 가지 조사를 온라인했고, (para-callgraph.stp
이라고 함)이 스크립트 발견 것입니다시스템 탭을 사용할 때 "프로브 오버 헤드가 임계 값을 초과했습니다"오류를 피하는 방법은 무엇입니까?
#! /usr/bin/env stap
function trace(entry_p, extra) {
printf("%s%s%s %s\n",
thread_indent (entry_p),
(entry_p>0?"->":"<-"),
ppfunc(),
extra)
}
probe $1.call { trace(1, $$parms) }
probe $1.return { trace(-1, $$return) }
은 다음과 같이 실행하기 :이 프로그램을 실행할 때
sudo stap para-callgraph.stp 'process.function("*")' -c `pwd`/my-program
지금, 내가 문제로 실행합니다. 모든 것이 처음에는 잘 작동하지만 곧 systemtap
표준 오류에 인쇄이, 및 종료는 :
ERROR: probe overhead exceeded threshold
WARNING: Number of errors: 1, skipped probes: 0
WARNING: There were 62469 transport failures.
WARNING: /usr/bin/staprun exited with status: 1
Pass 5: run failed. [man error::pass5]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
는 stap
휴리스틱가 트리거되고 있음을 나에게 보여 몇 가지 조사 online을하는 날을 차단하고, 나는 그것을 끌 수 -g
및 --suppress-time-limits
두 개의 플래그를 추가하십시오. (이 제안은 내 시스템에 man stap
에 의해 백업됩니다.) 그러나, 그 해결책은 간단하게 작동하지 않고 명령 :
ERROR: probe overhead exceeded threshold
WARNING: Number of errors: 1, skipped probes: 0
WARNING: There were 67287 transport failures.
WARNING: /usr/bin/staprun exited with status: 1
Pass 5: run failed. [man error::pass5]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
이유 :
sudo stap -g --suppress-time-limits para-callgraph.stp 'process.function("*")' -c `pwd`/core-cpu1
가 매우 유사한 오류 메시지를 출력하고 종료 이 플래그가 내 문제의 적절한 해결책이 아닌가? 그리고이 문제는 다른 방법으로 해결 될 수 있습니까, 아니면 단순히 이런 종류의 유스 케이스에 맞지 않는 systemtap입니까?
중요하다면 32 비트 Ubuntu VM에서 실행하고 있습니다.
N.B. 여기서 systemtap이 왜 실패하는지에 관심이 있으며, 다른 소프트웨어를 사용하여 같은 것을 달성하는 다른 방법이 아닙니다. (사실, 내 사용 사례에 대해 밝혀, 위의 코드 는에서 SystemTap의 남용이었다.) 당신은 소비자가 취할 수있는 것보다 더 빠른 프로브 인쇄됩니다, 그래서 만약 프로브와 소비자 사이의
--suppress - 시간 제한 과부하 방지 장치를 해제에서 근무해야한다. 메일 링리스트 (systemtap 버전 및 core-cpu1 프로그램의 성격에 대한 아이디어 포함)에 더 자세한 버그 보고서를 전달 하시겠습니까? – fche