我想运行一个执行清理的cron作业,它占用了大量的CPU和Mysql资源。我希望它只在服务器不是比较繁忙时运行。

从PHP确定这一点的最简单方法是什么? (例如,是否有一个查询返回在最后一分钟完成了多少次查询?...)

有帮助吗?

解决方案

if (function_exists('sys_getloadavg')) {
    $load = sys_getloadavg();
    if ($load[0] > 80) {
       header('HTTP/1.1 503 Too busy, try again later');
       die('Server too busy. Please try again later.');
    }
}

尝试根据需要更新此功能

其他提示

在Linux上,您可以从 / proc / loadavg 文件加载。

$load = split(' ',file_get_contents('/proc/loadavg'))
$loadAvg = $load[0]

如果这是Unix系统,则解析 uptime 的输出。这显示了CPU负载,其通常被认为是“忙”的良好度量。任何接近或超过 1.0 的东西都意味着“完全忙碌。”

有三个CPU“负载”在该输出中的时间给出平均超过1,5和15分钟的负载。选择适合您脚本的选项。 “负载”的定义在这里

您可以使用 Mysql列表流程中的信息功能可以查看有多少活动与睡眠,这是关于数据库负载的一个不错的指标。

如果您使用的是Linux,则可以使用 Sys GetLoadAvg 功能查看整体系统负载

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top