1

我在服务器上有一个进程。我的进程使用共享库,在 linux 后台运行。我在 gperftool 中使用 CPU 分析器来检查函数。步骤如下:

1.在我的应用程序中,

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

我检查了我在其他进程上的步骤(不使用共享库),没关系。

问题: dump.txt 文件只是保持不变的文件大小(8kb 或 9kb),尽管在 2 或 3 小时内长时间运行(应用程序收到来自客户端的消息),但无法显示输出。我认为因为我的应用程序使用了共享库,所以这里有些问题,完全不清楚这一点。

你能解释一下发生了什么吗?有什么解决办法吗?

非常感谢,

4

1 回答 1

1

运行中的零件LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so不正确。

根据文档http://goog-perftools.sourceforge.net/doc/cpu_profiler.html

要将 CPU 分析器安装到可执行文件中,请将 -lprofiler 添加到可执行文件的链接时间步骤中。(也可能在运行时使用 LD_PRELOAD 添加探查器,但不一定推荐这样做。)

您可以将 libprofiler 添加到-lprofiler应用程序的链接步骤中,例如

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

或将其添加到环境变量中LD_PRELOAD(而不是LD_LIBARY_PATH像您所做的那样):

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

当 gperftools 的 cpu profiler 正确使用时,它将在应用程序终止时打印有关事件计数和输出文件大小的信息。

于 2017-02-19T04:58:54.377 回答