Я пытаюсь профилировать fcgi
приложение (C ++), которое работает внутри apache
с mod_fascgi
с perftools
, ТАК это Centos 6 x86_64.
Проблема в следующем. В соответствии с документация по gperftools
«Из соображений безопасности профилирование процессора не будет записывать в файл — и, следовательно, не может использоваться — для программ setuid».
Apache должен быть запущен как root
, а затем использует setuid для использования apache
как пользователь, таким образом используя setuid
, затем gperftools
не будет писать в файл.
И работает Apache как root
также отключен.
Любое решение?
Пока я думал о 3 решениях:
Вы всегда можете прослушать высокий порт и начать / остаться как пользователь без полномочий root, что гораздо менее навязчиво, чем остальные три варианта.
Другой вариант — статически запустить fcgi под профилировщиком и подключить к нему httpd (сокет unix или TCP), не позволяя управлять процессами для FCGI в Apache и отключаться от диспетчера процессов.
Однако меня удивляет, что «вызовы setuid ()» обрабатываются так же, как двоичный файл, имеющий бит setuid. Вы уверены, что gperftools действительно блокирует первый и не просто неправильно используется? Разве это не будет запись частичного файла журнала?
Я перекомпилировал gperftools
и убрал чек suid.
Единственное, что нужно иметь в виду, это то, что для записи журнала вы не можете завершить процесс. А выполнение «service httpd stop» убьет процесс (поэтому он не очистит журнал).
Вы должны либо отправить сигнал (прочитайте документацию по gperftools), либо добавить ProfileStart()
а также ProfileStop()
звонки внутри вашей главной.