Vu Nguyen
Vu Nguyen

Reputation: 11

CPU profiler on Google Performance Tool (gperftools) - Process with shared library with NO OUTPUT ISSUE

I had a process on a server. My process uses a shared lib, runing in the linux background. I use CPU profiler in gperftool to examine the functions. The steps is following:

1. in my app,

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

2. CPUPROFILE_FREQUENCY=1000000 LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so CPUPROFILE=dump.txt ./a.out

3. pprof --text a.out dump.txt

I checked my steps on the other process (not using shared lib), it's ok.

Problem: The dump.txt file is just remain an unchanged file size (8kb or 9kb), can not show the output despite of long time running in 2 or 3 hours (the app receive message from clients). I think that because my app uses the shared lib, some thing wrong here, totally not clear about this.

Can you pls explain me what happened? Any solution?

Thanks a lot,

Upvotes: 1

Views: 2777

Answers (1)

osgx
osgx

Reputation: 94305

Part LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so is incorrect in your run.

According to documentation http://goog-perftools.sourceforge.net/doc/cpu_profiler.html

To install the CPU profiler into your executable, add -lprofiler to the link-time step for your executable. (It's also probably possible to add in the profiler at run-time using LD_PRELOAD, but this isn't necessarily recommended.)

you can either add libprofiler to linking step as -lprofiler of your application like

gcc -c myapp.c -o myapp.o
gcc myapp.o mystaticlib.a -Lmypath -lmydynamiclib -lprofiler -o myapp

or add it at with environment variable LD_PRELOAD (not LD_LIBARY_PATH as you did):

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

When cpu profiler of gperftools is correctly used, it will print information about event count and output file size when application terminates.

Upvotes: 1

Related Questions