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