2016-10-05 4 views
0

서버에서 프로세스가 발생했습니다. 내 프로세스는 리눅스 백그라운드에서 실행되는 공유 라이브러리를 사용한다. gperftool의 CPU 프로파일 러를 사용하여 기능을 검사합니다. 단계는 다음입니다 : 내 응용 프로그램에서Google 성능 도구 (gperftools)의 CPU 프로파일 러 - 출력 문제가없는 공유 라이브러리로 처리

1,

main() 
{ 
    ProfilerStart("dump.txt"); 
    ...code.. 
    ProfilerFlush(); 
    ProfilerStop(); 
return 0; 
} 

2 CPUPROFILE_FREQUENCY = 1000000 LD_LIBRARY_PATH =/usr/지방/lib 디렉토리/libprofiler.so CPUPROFILE = dump.txt ./

3.의 a.out pprof --text의 a.out dump.txt 나는 다른 프로세스 내 단계를 확인

(공유 리튬을 사용하지 b), 괜찮아.

문제 : 덤프 파일은 변경되지 않은 파일 크기 (8kb 또는 9kb)로 유지되며, 오랜 시간이 2 시간에서 3 시간 이내에 실행 되더라도 출력을 표시 할 수 없습니다 (클라이언트의 앱 수신 메시지). 나는 내 애플 리케이션이 공유 라이브러리를 사용하기 때문에, 여기에 어떤 것이 잘못되어 있다는 사실을 완전히 모른다고 생각한다.

무슨 일이 있었는지 설명해 주시겠습니까? 어떤 해결책?

고마워, LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so이 실행에 잘못된

답변

0

부.

, 실행 파일로 CPU 프로파일을 설치 실행 파일에 대한 링크 타임 단계로 -lprofiler 추가하려면 문서 http://goog-perftools.sourceforge.net/doc/cpu_profiler.html

에 따르면. (이 LD_PRELOAD를 사용하여 런타임에 프로파일에 추가 할 수도 아마 가능하지만, 이것은 반드시 권장하지 않습니다.)

당신이

gcc -c myapp.c -o myapp.o 
gcc myapp.o mystaticlib.a -Lmypath -lmydynamiclib -lprofiler -o myapp 
같은 응용 프로그램의 -lprofiler로 단계를 연결에 libprofiler를 추가 할 수 있습니다 제대로

LD_PRELOAD=/usr/lib/libprofiler.so ./myapp 

gperftools의 CPU 프로파일 러가 될 때 사용

또는 (당신이했던 것처럼하지 LD_LIBARY_PATH) 환경 변수 LD_PRELOAD로에 추가 d, 응용 프로그램이 종료되면 이벤트 수 및 출력 파일 크기에 대한 정보를 출력합니다.