php - 服务器代码产生过多的 php 实例
问题描述
我有一个服务器,它有一个由频繁的 cron 作业触发的操作。
这是一个基于 Silverstripe (4.0) 的 php 应用程序。
我面临的问题是 php 进程保持活动状态并保持数据库连接打开。这意味着几天后,一旦 SQL 停止接受新连接,站点就会完全停止工作。
该系统有两个关于 cron 作业的任务;
一个人需要一个巨大的 CSV 文件并将其拆分为较小的子文件,然后将这些子文件导入数据库。这个使用锁定文件来防止它运行到以前运行的实例中。我不太确定这是否有效。
第二个任务处理所有已经大批量更新的记录。
其中任何一个都可能是超载的根源,但我不确定如何缩小范围。
诊断问题根源的最佳方法是什么?
解决方案
在调试方面,这就像使用xdebug和kcachegrind之类的东西来分析应用程序的任何其他任务一样。为确保进程不会运行太久,您可以限制.PHP.ini
CLI
然后让CLI
进程运行很长时间,但只有足够的时间添加一些东西来设置每行的最大执行时间:
$allowed_seconds_per_row = 3;
foreach($rows_to_process as $row){
set_time_limit($allowed_seconds_per_row);
$this->process($row);
}
您还可以注册一个关闭函数来记录脚本结束时的状态。
推荐阅读
- python-3.x - 在正在运行的 Sawtooth 应用程序上更新地址
- typescript - 不能省略条件类型的道具,因为推断永远需要返回 - 如何?
- php - get()->count() 和 count() 有什么不同
- php - 如何在评论标题中插入 wordpress 帖子值?
- telegram-bot - 如何使用 unreal4u 电报 API 对电报机器人中的内联查询做出响应
- javascript - 在 javascript 中的位操作代码中体验无限循环
- node.js - 我如何在 .save 函数后使用 pre hook 填充文档
- javascript - 正确打破火力基地 forEach 循环
- java - JetBrains Exposed 在尝试创建事务时抛出错误
- batch-file - 批量颜色提取到 csv 标准化