Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gperf工具&x2B;阿帕奇&x2B;fcgi,它赢了';不要写入文件_C++_Apache_Fastcgi_Gperftools - Fatal编程技术网

C++ gperf工具&x2B;阿帕奇&x2B;fcgi,它赢了';不要写入文件

C++ gperf工具&x2B;阿帕奇&x2B;fcgi,它赢了';不要写入文件,c++,apache,fastcgi,gperftools,C++,Apache,Fastcgi,Gperftools,我正试图用mod\u fascgi和perftools分析一个在apache中运行的fcgi应用程序(C++)。Centos 6 x86_64也是如此 问题如下。据 出于安全原因,CPU评测不会写入文件,因此无法用于setuid程序 Apache必须作为root启动,然后使用setuid将Apache用作用户,从而使用setuid。然后,gperftools将不会写入该文件。 并且以root用户身份运行Apache也被禁用 有解决办法吗 到目前为止,我想到了3种解决方案: 在应用程序中创建一个

我正试图用
mod\u fascgi
perftools
分析一个在
apache
中运行的
fcgi
应用程序(C++)。Centos 6 x86_64也是如此

问题如下。据

出于安全原因,CPU评测不会写入文件,因此无法用于setuid程序

Apache必须作为
root
启动,然后使用setuid将
Apache
用作用户,从而使用
setuid
。然后,
gperftools
将不会写入该文件。 并且以root用户身份运行Apache也被禁用

有解决办法吗

到目前为止,我想到了3种解决方案:

  • 在应用程序中创建一个测试来模拟一些请求和模拟FCGI类
  • 使用-DBIG\u SECURITY\u-HOLE标志重新编译Apache,以允许以root用户身份运行Apache
  • 重新组合gperftools,删除suid的检查

您可以始终在高端端口进行监听,并以非root用户的身份启动/保留,这比其他三个选项的干扰小得多

另一种选择是在探查器下静态启动fcgi,并让httpd连接到它(unixsocket或TCP),而不是在Apache中对fcgi进行流程管理,并从流程管理器中分叉


然而,令我惊讶的是,“calls setuid()”被视为与具有setuid位的二进制文件相同。你确定gperftools真的阻止了前者,而不仅仅是被误用了吗?它不是在写一个部分日志文件吗?

我重新编译了
gperftools
并删除了suid的检查

要记住的唯一一件事是,要编写日志,您不能终止进程。执行“服务httpd停止”将终止进程(因此不会刷新日志)


您必须发送一个信号(阅读gperftools文档),或者在main中添加
ProfileStart()
ProfileStop()
调用。

感谢您的想法,在非根端口中启动apache也可以工作。有一个ProfilerFlush()函数,用于强制输出。