gperftools + apache + fcgi, он не будет записывать в файл

Я пытаюсь профилировать fcgi приложение (C ++), которое работает внутри apache с mod_fascgi с perftools, ТАК это Centos 6 x86_64.

Проблема в следующем. В соответствии с документация по gperftools

«Из соображений безопасности профилирование процессора не будет записывать в файл — и, следовательно, не может использоваться — для программ setuid».

Apache должен быть запущен как root, а затем использует setuid для использования apache как пользователь, таким образом используя setuid, затем gperftools не будет писать в файл.
И работает Apache как root также отключен.

Любое решение?

Пока я думал о 3 решениях:

  • Создайте в приложении тест для имитации некоторых запросов и макетов классов FCGI.
  • Перекомпилируйте Apache с флагом -DBIG_SECURITY_HOLE, чтобы разрешить запуск apache от имени root.
  • Перезапустите gperftools, удалив проверку suid.

1

Решение

Вы всегда можете прослушать высокий порт и начать / остаться как пользователь без полномочий root, что гораздо менее навязчиво, чем остальные три варианта.

Другой вариант — статически запустить fcgi под профилировщиком и подключить к нему httpd (сокет unix или TCP), не позволяя управлять процессами для FCGI в Apache и отключаться от диспетчера процессов.

Однако меня удивляет, что «вызовы setuid ()» обрабатываются так же, как двоичный файл, имеющий бит setuid. Вы уверены, что gperftools действительно блокирует первый и не просто неправильно используется? Разве это не будет запись частичного файла журнала?

0

Другие решения

Я перекомпилировал gperftools и убрал чек suid.

Единственное, что нужно иметь в виду, это то, что для записи журнала вы не можете завершить процесс. А выполнение «service httpd stop» убьет процесс (поэтому он не очистит журнал).

Вы должны либо отправить сигнал (прочитайте документацию по gperftools), либо добавить ProfileStart() а также ProfileStop() звонки внутри вашей главной.

0

По вопросам рекламы [email protected]