Профилировщик ЦП в Google Performance Tool (gperftools) - обработка с общей библиотекой без ВЫПУСКАЕМОГО ВЫХОДА

У меня был процесс на сервере. Мой процесс использует общую библиотеку, работающую в фоновом режиме Linux. Я использую профилировщик процессора в gperftool для проверки функций. Шаги следующие:

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 просто остается неизменным размером файла (8 КБ или 9 КБ), не может отображать вывод, несмотря на долгое время работы в 2 или 3 часа (приложение получает сообщение от клиентов). Я думаю, что, поскольку мое приложение использует разделяемую библиотеку, что-то здесь не так, совершенно неясно об этом.

Можете ли вы объяснить мне, что случилось? Любое решение?

Большое спасибо,

1 ответ

Часть LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so неверно в вашем беге.

Согласно документации http://goog-perftools.sourceforge.net/doc/cpu_profiler.html

Чтобы установить профилировщик ЦП в свой исполняемый файл, добавьте -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 он будет выводить информацию о количестве событий и размере выходного файла после завершения работы приложения.

Другие вопросы по тегам