AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1080201
Accepted
Burak.H
Burak.H
Asked: 2021-10-12 06:00:23 +0800 CST2021-10-12 06:00:23 +0800 CST 2021-10-12 06:00:23 +0800 CST

Cronjob 文件未关闭和 100% CPU 使用率

  • 772

我每 10 秒使用 cronjob 运行一个 php 文件。虽然系统运行良好,但我昨晚注意到 php 正在使用 100% 的 CPU 并使系统崩溃。

当我检查时ps aux,我看到我的 cron 文件有几十个正在处理的 cron 文件。当我检查数据库时,甚至没有理由这样做。所以我的 php 页面应该返回空并立即完成。

我有几个问题:

1-为什么会在 Cron 中导致此故障?

2- 当我为例如 codigniter 而不是 Cron 进程创建排队系统时,它与 cron 有何不同?

3- 当我将 PHP 设置为在后台运行的系统时,我会不会出现这些问题?

谢谢你提前

php cron php-cli
  • 1 1 个回答
  • 194 Views

1 个回答

  • Voted
  1. Best Answer
    Smitty
    2021-10-12T11:48:51+08:002021-10-12T11:48:51+08:00
    1. 为什么会导致 Cron 出现这种故障?

    这不是 cron 问题。

    Cron 是一个非常简单的调度程序,它只是在您指定的时间/间隔启动一个新批处理。

    无论出于何种原因,当您的批处理作业无法在下一次迭代开始之前及时完成时,您将以两个并发进程结束。Cron 没有采取任何措施来防止这种情况发生。

    这实际上取决于您的假设和代码是否会立即引起问题。

    可能是第二次迭代立即产生某种形式的死锁并无限期停顿,10 秒后第三次迭代因第二次迭代引起的死锁而停顿,10 秒后下一次迭代也立即停顿。等等等等 那可以很快滚雪球。

    或者它可能是一个慢得多的过程,对于每个单独的批次,运行时间缓慢增加,而不是停止越来越多的运行批次最终同时运行。这(最终)会进一步增加负载,开始资源争用并导致批处理作业需要更长的时间才能完成,同时/并发批处理和资源匮乏。

    1. 当我为例如 codigniter 而不是 Cron 进程创建排队系统时,它与 cron 有何不同?

    正如您在这里所经历的,cron 不是排队系统。它只是一个非常简单的调度程序。

    如果您想添加更复杂的作业控制,您需要创建它。例如,请参阅此处的答案,了解如何简单地防止多个 cron 批处理在您的批处理规范中同时运行。

    否则,确实运行比简单 cron 更高级的东西可能是一个解决方案。

    1. 当我让 PHP 成为一个在后台运行的系统时,我会不会出现这些问题?

    如果根本原因是您的代码在两个批次同时运行时会中断,那么旨在使您的代码运行得更快的措施既不会消除该缺陷,也不会阻止该缺陷再次发生。

    • 0

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve