【问题标题】:How to call Apache2 in single process mode by using callgrind to debug如何使用callgrind调试单进程模式调用Apache2
【发布时间】:2012-11-16 08:46:24
【问题描述】:

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

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

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

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

任何想法表示赞赏。
谢谢

【问题讨论】:

    标签: apache gdb valgrind callgrind


    【解决方案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 文件的权限更改为更安全的权限。

    Here's my blog post 记录我自己为完成这项工作而付出的努力。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当我使用“kill -9”时,httpd被杀死,但是valgrind无法写入缓存模拟文件,我无法从valgrind得到任何结果。
      • 是的kill -9 将导致内核终止进程而没有进一步的运行机会,并且由于 valgrind 是同一进程的一部分,因此它将无法进行任何最终报告。这就是为什么我说要改用kill -TERM
      • 我已经尝试了命令“kill -TERM httpd's pid”。但它的作用与 kill -9 和 valgrind 输出错误“无法打开缓存模拟输出文件”相同。 >
      • 对,所以这是一个完全不同的问题——你得到这个错误的事实意味着 valgrind 已经控制并试图输出数据。很可能它没有写入默认位置的权限,因此请尝试使用--callgrind-out-file= 指定它可以写入的位置。
      • 我试过 --callgrind-out-file ,不能有任何区别。我确定我有权限,因为我以 root 用户身份运行我的命令。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多