我在服务器上有一个进程。我的进程使用一个共享库,在linux后台运行。我在gperftool中使用CPU profiler来检查函数。步骤如下:
我的应用中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小时内长时间运行但无法显示输出(应用程序接收消息)来自客户)。我认为因为我的应用程序使用共享库,这里有些不对劲,完全不清楚这一点。
你能解释一下发生了什么吗?任何解决方案?
非常感谢,
答案 0 :(得分:0)
部分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时,它会在应用程序终止时打印有关事件计数和输出文件大小的信息。