防止 PHP 脚本在运行时耗尽所有资源?

2024-03-21

我有一个每日 cron 作业,运行大约需要 5 分钟(它会收集一些数据,然后更新各种数据库)。它工作正常,但问题是,在这 5 分钟内,该站点完全没有响应任何请求,无论是 HTTP 还是其他请求。

看起来 cron 作业脚本在运行时会占用所有资源。我在 PHP 文档中找不到任何可以帮助我的东西 - 我怎样才能让脚本知道只使用,比如说,50% 的可用资源?我宁愿让它运行 10 分钟,并在这段时间内让用户可以使用该网站,也不愿让它运行 5 分钟,然后每天都有用户抱怨停机。

我确信我可以想出一种方法来配置服务器本身来实现这一点,但我更希望 PHP 中有一种内置方法来解决这个问题。有没有?

或者,作为 B 计划,我们可以在脚本运行时将所有用户请求重定向到静态停机页面(与现在发生的情况相反,即页面无限期加载或最终超时)。


普通脚本无法占用 100% 的资源,资源会分散到各个进程中。它可能会严重减慢一切,但不会锁定所有资源(不做一些时髦的事情)。你可以通过这样做得到提示top -s在命令行中,查看哪个进程占用大量资源。

这导致得出结论:某些东西锁定了所有进一步的进程。正如 Arkascha 评论的那样,您的数据库很有可能被锁定。这个答案解释了哪种表类型 https://stackoverflow.com/a/6796566/2519416你应该使用;如果您没有将其设置为 InnoDB,您可能需要这样做,至少对于锁定表而言。

如果您写入大文件,也可能是磁盘 I/O,尝试将其拆分为较小的读/写或尝试将一些信息(例如,如果它是带有列表的文件)到数据库中(假设有空闲空间) )。

也可能是CPU。要解决这个问题,您需要提高代码效率。重新检查您的代码,看看您是否进行了繁重的操作,并尝试使这些操作更小。通常您希望尽可能快,现在您希望它们尽可能轻量级,这改变了您编写代码的方式。

如果仍然锁定,则需要进行调试。关闭大部分代码并检查锁定是否仍然发生。继续打开代码,直到您注意到锁定。然后解决这个问题。试着弄清楚是什么让你付出了如此大的代价。只有少数脚本需要大量资源,现在是优化的时候了。一种选择可能是将其分为两个(或更多)步骤。运行一个准备/清理数据的 cron 以及一个处理数据的 cron。这些不必同步运行,它们之间可能有几分钟的时间。

如果这不是一个选择,请对您的代码进行基准测试并尽可能地改进。如果您有繁重的查询,则可以通过在繁重的查询中仅选择 ID 并使用第二个查询来获取数据来改进。如果可以,请使用数据库来过滤、排序和管理数据,不要在 PHP 中这样做。
我也实现过一次是每N个动作睡眠一次。

如果您的脚本确实如此极端,则另一种解决方案可能是将其移至网站上很少/没有访问者的时间。即使消除了瓶颈,也没有人喜欢速度慢的网站。

并且始终可以选择增加硬件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 PHP 脚本在运行时耗尽所有资源? 的相关文章

  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • 为什么AES java解密返回额外的字符?

    请原谅我英语不好 我使用 mcrypt 我从这里得到它用于 php 和 java 的 MCrypt https snipt net raw ee573b6957b7416f28aa560ead71c3a2 nice 在我的android应用
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • cURL 错误 77:设置证书验证位置时出错:CAfile

    我正在使用 Firebase php SDKlink https firebase php readthedocs io en latest index html并在 Windows 10 上的 XAMPP 服务器上使用 laravel 最
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • strlen()==0 和empty()之间有区别吗?

    我正在查看其他人编写的一些表单验证代码 我看到了这个 strlen 0 当测试表单变量是否为空时 我使用empty 功能 一种方法比另一种方法更好吗 它们在功能上等效吗 strlen是获取字符串中的字符数 同时empty用于测试变量是否为空
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • php - 我应该加密电子邮件地址吗?

    当用户注册时 我应该将他们的电子邮件按原样存储在数据库中还是对其进行哈希处理 我希望稍后能够解密 那么我应该使用 md5 吗 谢谢你 No md5 is 单向哈希函数 http en wikipedia org wiki Cryptogra
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • PHP 中的 Preg_replace

    我想替换 中包含的字符串中的内容content 它是多行等 preg replace 函数应该删除整个 com 没有垫子 蒙特 尝试这个 result preg replace s replacement content subject
  • 使用日语“Enter”键进行搜索功能

    我在日语方面遇到了问题 我有一个允许用户搜索数据的表单 当用户输入要搜索的字符串并按 Enter 键时 搜索功能就会执行 我的代码是 formSearch input keyup function event var key event c
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function

随机推荐

  • 如何从 Slack 获取用户 ID 到机器人服务

    我正在使用 Azure LUIS 创建一个简单的机器人 这是我的第一个机器人 经过一些研究后 我取得了一些不错的进展 现在还与 Slack 集成作为测试它的渠道 机器人功能运行良好 但我希望识别用户的身份 这样我就可以个性化机器人对话 并从
  • Python - 在 Flask 中将查询结果从服务器返回到客户端

    我拥有的 我在 Flask 中有一个客户端 服务器 客户端将 JSON 格式的查询发送到服务器 服务器创建一个 JSON 文件 还有另一个工具可以接受此查询 在数据库上执行它并将结果写入 results txt 文件 服务器定期检查 结果
  • 如何在不隐藏控制框的情况下隐藏 WPF 功能区窗口(启用 Aero)中的标题栏?

    我目前使用 WPF Ribbon Window 并在当前窗口中启用 Aero 如下图所示 我喜欢隐藏标题 模式测试仪 因为没有足够的空间来显示它 但我还是需要原装windows控制盒以及当前标题 即使它会被隐藏 将显示在任务管理器和其他相关
  • for 循环进行多个扩展并对每个文件执行一些操作

    我试图在 bash 中编写一个 for 循环来获取扩展名为 jpg jpeg png 的文件 这是我的尝试 但不起作用 for file in arg jpg jpeg png do echo arg something jpg gt z
  • 抽象工厂模式讲解

    我正在研究设计模式并遇到Abstract Factory Pattern根据定义是 抽象工厂模式说只需定义一个接口或 用于创建相关 或依赖 对象系列的抽象类 但没有指定它们的具体子类 这意味着抽象 工厂让一个类返回类的工厂 但我无法彻底理解
  • 使用 Swift 4.2.1 编译的模块无法被 Swift 5.0 编译器导入

    我正在尝试按照说明将第三方应用程序集成到项目中https github com Paytm Payments Paytm iOS App Kit tree master Swift BitCodeDisabled PaytmNativeSD
  • 实体框架 CTP5 代码优先:将一个类与另一个类的多个集合映射

    使用 EF CTP5 Code First 我尝试映射一个类模型 该模型在一个类中包含指向另一个类的多个集合 这是我的意思的一个例子 public class Company public int CompanyId get set pub
  • php中的empty()、isset()和is_null()函数有什么区别?

    我做了很多研究 但无法找到这三者之间的区别 所以我做了一个简短的例子 希望对我们有所帮助 这是所有这三个的表格表示 Case Empty isset is null 1 a NULL 1 0 1 2 Not exists 1 0 1 War
  • 如何启用 :tsearch 字典进行 pg_search 多重搜索?

    我正在将 pg search 添加到 Rails 应用程序中 我正在按照 github 上的说明进行操作铁路广播公司 http railscasts com episodes 343 full text search in postgres
  • Web Components(原生UI)之间如何通信?

    我正在尝试为我的一个 UI 项目使用本机 Web 组件 对于这个项目 我没有使用任何框架或库 例如 Polymer 等 我想知道是否有最好的方法或其他方式在两个项目之间进行通信像我们在 AngularJS Angular 中所做的那样的 W
  • Flexslider - 动画:“幻灯片”,animationLoop:“true” - 冲突

    我有一个问题弹性滑块2 http www woothemes com flexslider在某些特定情况下 我将它用作内容滑块 我需要的是让动画幻灯片而不是淡入淡出 并循环播放幻灯片 我有 3 张幻灯片 其中包含 div 内容和更多列表 以
  • 致命错误:调用成员函数 getKeyName()

    我是 joomla 的新手 我创建了一个 joomla 组件 当我单击管理中的新按钮时 我收到这样的错误 致命错误 在 C xampp htdocs Joomla1 libraries joomla application componen
  • 现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?

    多年前 Unix 密码的长度限制为 8 个字符 或者如果密码长度超过 8 个字符 那么多余的字符也不会产生任何影响 大多数现代 Unix Linux 系统上仍然是这种情况吗 如果是这样 大约什么时候在大多数系统上可以使用更长的密码 有没有一
  • 将双精度数字舍入为以位数给定的较低精度的有效方法

    在 C 中 我想将双精度舍入到较低的精度 以便可以将它们存储在关联数组中不同大小的存储桶中 与通常的舍入不同 我想舍入到多个有效位 因此 大数字的绝对变化将比小数字变化大得多 但它们往往会按比例变化 因此 如果我想四舍五入到 10 个二进制
  • 为什么这个具有推导返回类型的内联方法尚未定义?

    include
  • RadGrid 底部的水平滚动空白

    我正在使用 RadGrid 从数据库检索数据 我的 RadGrid 中有更多列 因此我需要显示 RadGrid 水平滚动以防止页面扩展 但禁用垂直滚动 因此网格的高度应扩展以始终显示网格中的所有行 我得到了结果 但 RadGrid 底部有空
  • 使用 Chosen 链接选择

    我正在尝试将选择与Chosen https github com harvesthq chosen and Chained http www appelsiini net projects chained但我不确定我是否正确实现了 chos
  • 文件观察器创建事件

    我正在使用 net 文件监视程序监视文件夹中的某些类型的文件 mbxml 我正在使用 filewatcher 创建的事件 一旦创建的事件触发 我必须将此文件移动到另一个文件夹 这种方法的问题在于 一旦文件复制开始 就会触发创建的事件 因此
  • 存储用户时区的最佳实践 - TSQL/.Net

    我需要跟踪用户的时区 以便在他们指定的特定时间 在他们自己的时区 处理他们的信息 或不处理 显而易见的答案是将时区及其个人资料信息存储在用户数据库中 有点棘手的是夏令时 从下图中请注意 大多数北部和南部地区使用夏令时偏移 因此 存储时区偏移
  • 防止 PHP 脚本在运行时耗尽所有资源?

    我有一个每日 cron 作业 运行大约需要 5 分钟 它会收集一些数据 然后更新各种数据库 它工作正常 但问题是 在这 5 分钟内 该站点完全没有响应任何请求 无论是 HTTP 还是其他请求 看起来 cron 作业脚本在运行时会占用所有资源