2013-06-04 3 views
1

내 프로그램 실행 중 각 기능에 소요 된 시간을 계산하는 데 gprof을 사용하고 있습니다.gprof를 사용하면 프로그램 실행을 차단하는 이유는 무엇입니까?

지난 주에 CPU 사용량이 100 %에 도달했을 때 프로그램을 시작할 수 없다는 사실을 알게되었습니다.

  • 거의 하루 동안 코드가 실행되고 아무 것도 변경되지 않았습니다.
  • 어떤 경우에는 100 %에 도달 CPU 사용이 불가피 특별히 나는 그것이 "stress"도구의 도움으로, 자원의 최대 양을 사용하는 동안 내 시스템을 강조하고 프로그램을 테스트 할 때 http://weather.ou.edu/~apw/projects/stress/

나는 스레드 읽고 :

Alternatives to gprof

을하고 마이크 Dunlavey의 응답을 읽어 :

이렇게 현지화되지 않은 문제는 무엇입니까? 그건 중요하지 않니? 주장하지 않은 gprof에 기대를 두지 마십시오. 은 측정 도구 일 뿐이며 CPU 바운드 작업 만 수행합니다.

하고 높은 점수를 가지고도 노먼 램지의 응답 :

Valgrind has an instruction-count profiler with a very nice visualizer called KCacheGrind. As Mike Dunlavey recommends, Valgrind counts the fraction of instructions for which a procedure is live on the stack, although I'm sorry to say it appears to become confused in the presence of mutual recursion. But the visualizer is very nice and light years ahead of gprof합니다. 스레드가 닫혀 등이 사전

P.S.에서

감사를 수행 할 수있는 좋은 방향 인 경우

하지만

는 비 건설적으로, 궁금 해서요 사전

답변

1

모든 점에서

덕분에 구글 검색을 사용하는 동안

같은 질문을 할 때, 나는 관련 뭔가를 찾을 수 없습니다 "CPU가 100 %에 도달하면 왜 gprof은 작동하지 않습니다" 100 %는 매달아졌으며 I/O를 수행하지 않음을 의미합니다.

gprof으로 프로그램을 실행해도 프로그램이 중단되지만 그렇지 않은 경우는 그렇지 않습니까?

그건 이상한 일이지만, 알아 내려고하지 않을 것입니다.

내가 말한대로 over and over, 난 그냥 몇 가지 스택 샘플을 수동으로 잡을 것입니다. 그런 다음 루틴에 사용 된 시간의 백분율은 표시되는 샘플의 비율입니다. 고정밀 측정이 필요하다고 생각되면 Zoom 또는 OProfile과 같은 스택 샘플러를 사용해보십시오.

+0

안녕하세요 마이크와 귀하의 응답을 주셔서 감사합니다 – user2307229

+0

정확하게, 내가 gprof 및 CPU 100 %를 사용하지 않을 때 내 메인의 첫 번째 "환영 로그 printf"도 인쇄되지 않습니다.
또한 ** Oprofile **을 설치했는데 어떤 일이 벌어지는 지보고 알려줄 것입니다! – user2307229

+0

@ user2307229 : 시작될 때 프로그램에 무한 루프가있는 것처럼 들립니다. 무한 루프를 찾으려면 GDB에서 실행하십시오. 출력 창에서 Control-C를 눌러 중단하십시오. GDB 윈도우에서 "스레드 1"을 실행하여 GDB가 프로그램의 스레드를 찾고 있는지 확인한 다음 "bt"를 입력하여 호출 스택을 표시합니다. 루프가 그 중 하나에 있기 때문에 스택의 각 레벨에서 코드를 검사하십시오. 여전히 명확하지 않은 경우 반복해서 볼 때까지 한 단계 씩 실행하십시오. –