【问题标题】:php stops working while executing a long running scriptphp 在执行长时间运行的脚本时停止工作
【发布时间】:2012-09-03 07:29:04
【问题描述】:

我有一个长时间执行的 php 脚本,它必须运行几个小时,但在 10 到 20 分钟之后。脚本停止生成输出,但页面仍在执行时间。当我刷新页面时,它将继续生成输出。几次刷新后,php 停止生成任何输出。我在脚本中使用了套接字,并且所有超时都设置为 24 小时。

【问题讨论】:

  • 你真的不应该通过 http 运行需要这么长时间的进程,它应该在命令行上运行 (php.net/manual/en/features.commandline.php)
  • 我尝试使用 CMD 运行它,但它是一样的。它正常工作的代码没有任何问题。 @达贡
  • @user754282 我看不出它如何在命令行上运行相同的结果,因为没有浏览器,并且在原始问题中支付了一部分,这里需要更多详细信息。跨度>

标签: php sockets iis


【解决方案1】:

我前阵子问过similar question,还是没有得到答案,不过你可以试试看:

  • 你的 apache 错误日志
  • 您的 php_error 日志文件(在 php.ini 中设置,或者在代码开头使用 ini_set
  • 记录您的内存消耗 - 这可能是原因。

【讨论】:

  • 谢谢@Smok 我认为这是由于内存消耗和 CPU 使用率造成的。过了一会儿(12 分钟),我的脚本停止产生输出,explorer.exe CPU 使用率与 php.exe 一起达到 %25,CPU 使用率变为 %25。当我终止脚本时,CPU 使用率仍为 %25,但过了一会儿就正常了。为什么会这样?
  • 25% 很可能是 CPU 四个核心之一的 100%。这意味着 PHP 正在为自己消耗整个核心。杀死这个进程后,它需要时间来计算所有排队的任务并释放分配的内存。您必须在这里和那里(在主循环内?)放置sleep()usleep() 以允许其他进程使用该核心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多