1

我一直试图让 apache 在信号处理/调试模式下运行,以便将 callgrind 与它一起使用,并有一个简单的单一进程用于调试。

有没有人有在单进程模式下运行 apache 的经验?

我试过跑步httpd -X。这可以用单个进程启动 apache,(很好)但是当像这样运行时,还没有找到一种干净的方法来再次关闭它们。唯一可行的方法是kill -9. 这也吹走了任何调试输出,所以在使用 callgrind 时不会让我更进一步。对于那些感兴趣的人,我正在运行的完整命令是:

valgrind --tool=callgrind  /path/to/apache2/httpd -X

任何想法表示赞赏。
谢谢

4

2 回答 2

1

有两个问题需要克服:

  1. Apache 需要一堆环境变量
  2. Apache 从 root 用户降到 apache/www-data,这会阻止 valgrind 写入文件

在 ubuntu 上,这应该可以解决问题:

source /etc/apache2/envvars
valgrind --tool=callgrind /usr/sbin/apache2 -X

在 RHEL/centos/fedora 上(未经测试):

source /etc/sysconfig/httpd
valgrind --tool=callgrind /usr/sbin/httpd -X

加载后,在访问站点之前,使 callgrind 文件成为可写的(valgrind 将在完成后删除临时文件):

chmod 777 /tmp/vgdb* callgrind*

完成后,请记住将 callgrind 文件的权限更改为更安全的权限。

这是我的博客文章,记录了我自己努力完成这项工作的过程。

于 2017-04-26T19:26:58.760 回答
0

一个简单kill -TERM的针对apache进程应该告诉它关闭。

于 2012-11-28T13:44:41.410 回答