【问题标题】:Tracking php process on framework在框架上跟踪 php 进程
【发布时间】:2012-11-21 17:43:17
【问题描述】:

我有一个在 linux 机器上运行的 php 框架,基本上每个请求都通过 .htaccess 重定向到 index.php

Options +FollowSymLinks

IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*jpg$|!.*gif$|!.*png$|!.*jpeg$|!.*bmp$


RewriteRule . index.php

我的一个 php 开始运行 %100 CPU 我想跟踪那个进度但是当我用

检查进程时

ps 辅助 | grep 23791

user 23791  0.3  0.8  30460 15288 ?        S    12:32   0:01 /usr/bin/php /home/user/public_html/index.php

像往常一样,请求重定向到 index.php。但是我必须找到这是哪个请求。

有没有办法调试这个问题?

谢谢。

【问题讨论】:

    标签: php linux debugging process


    【解决方案1】:

    你可以使用 firephp 或 log 来追加到 linux 上的文件你想要一些指针还是足够的信息?

    【讨论】:

    • 感谢您的回答,但我的大部分进程都是通过 cron 运行的,没有叶端。我想添加附加到日志不是一个选项,项目大约百万行,如果我没有跟踪,我无法将日志记录添加到所有进度。
    【解决方案2】:

    我只是在寻找这个问题时发现了我自己的问题。这次我有答案了。

    如果您想通过 ps 在 linux 控制台上查看进度的详细信息,您必须使用 proctitle 这个 pecl 扩展程序将为您提供

    setproctitle() 函数。

    扩展程序很旧,但即使在 zts 模式下也能正常工作。

    如果您使用的是 cli 版本,您可以使用:cli-set-process-title() 这是原生 php 函数(版本 PHP5 >=)

    我用来在 linux 上跟踪的简单代码:

    <?
    if ((PHP_SAPI === 'cli' OR defined('STDIN'))) {
        $tmp = $_SERVER["argv"];
        unset($tmp[0]);
        $text =  "/". implode('/',$tmp);
        @cli_set_process_title (urldecode($text));
    } else {
        @setproctitle (urldecode($_SERVER["REQUEST_URI"]));
    }
    ?>
    

    我只是把它写到 codeigniter 上的 top index.php。

    查看进程在 linux 上使用最多的 cpu 和内存:

    ps o pid,stat,time,pcpu,pmem,cmd -C php --sort -pcpu
    

    现在您将能够看到进程

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多