php - 是否可以将调试器附加到正在运行的 PHP 进程?

标签 php debugging dump

我有一个 PHP 脚本,我们每隔几分钟通过一个 cron 条目运行一次,并且时不时地(大约每周一次)而不是正常结束,它保持运行,占用 100% 的 CPU 核心(我' m假设,无限循环)

查看代码并“思考”它,我找不到发生这种情况的任何原因,但确实如此。到目前为止,当我得到 3 个或更多时,我会杀死它们,这解决了 CPU 问题,但我想对此做点什么......

有没有什么方法可以转储一个进程,或者用调试器附加到它,这样我就可以知道一些任何它在做什么? (它在哪一行 PHP 上会有很大的帮助)。我不介意当我转储时进程是否终止,或其他任何事情。

这是一个 PHP 脚本,在 CentOS 5.6 机器上从命令行运行,我是 *nix 的大菜鸟,所以如果你能给我一些傻瓜教程太棒了。

谢谢! 丹尼尔

最佳答案

我不知道如何将调试器附加到尚未专门准备好 PHP 调试扩展(例如 xdebug)的 PHP 进程。但是,您可以使用更通用的实用程序 strace 来猜测正在发生的事情,它可以提供进程正在运行的系统调用的踪迹。这只会告诉您正在执行哪些系统调用,但这可能足以(取决于上下文)确定发生了什么。

关于php - 是否可以将调试器附加到正在运行的 PHP 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604796/

相关文章:

java - Java 应用程序会因 -Xdebug 的存在而变慢还是仅在单步执行代码时变慢?

mysql - 转储文件 MySQL 5.6.10

linux - 如何使linux核心转储文件每次都被覆盖?

PHP array_sum 不工作

php - 在基于 AJAX 的应用程序中使用 token 防止 CSRF

php - 使用 LOAD DATA INFILE 时如何避免重复数据

sql-server-2005 - SQL Server 插入数据的转储

php - 如何在 wordpress 中为多个 meta_key 更新用户元数据

javascript - 动态加载的 js 函数不会出现在 Firebug js 调试器中

c - 使用 GDB 在 "?? ()"中出现内存故障