记录 cronjobs 的 cpu 时间、峰值内存等

Posted

技术标签:

【中文标题】记录 cronjobs 的 cpu 时间、峰值内存等【英文标题】:log cpu time, peak mem etc for cronjobs 【发布时间】:2011-12-19 16:28:30 【问题描述】:

我在网络服务器上有相当多的 cronjobs,它们以不同程度的好坏运行。

似乎其中一些在测试数据库上需要意外数量的 CPU 周期。当然,我可以在 16:30 看到哪些工作在咆哮,但由于 crons 的数量,如果我有这样的日志,我的任务会容易得多:

Dec 19 02:13:09  /var/crons/cron1  [user cpu time used]  [system cpu time used]  [peak mem]  ..

有没有我可以在 crontab 之前添加的实用程序,如下所示:

*/6 * * * * nice -n 18 getrusage?? /usr/bin/php /var/crons/cron1 > /var/log/something

也许与getrusage(2)有关?

【问题讨论】:

【参考方案1】:

您实际上可以从 PHP 调用 getrusage,所以也许这个想法是可行的:而不是从 crontab 调用 /usr/bin/php,而是调用一个在调用实际 PHP 脚本之前和之后调用 getrusage 的包装器:

#!/usr/bin/php
<?php
$fh = fopen("/var/log/cronusage.log", "a");
fputs($fh, "Executing " . $_SERVER['argv'][1] . "\n");
fputs($fh, "BEFORE\n");
foreach (getrusage() as $k => $v) 
    fputs($fh, "$k -> $v\n");

fclose($fh);

$_SERVER['argv'][0] = '/usr/bin/php';
// FIXME Attention args not escaped possible security vuln.
system(join(' ', $_SERVER['argv']));

$fh = fopen("/var/log/cronusage.log", "a");
fputs($fh, "AFTER\n");
foreach (getrusage() as $k => $v) 
    fputs($fh, "$k -> $v\n");

fputs($fh, "\n");
fclose($fh);
?>

没有经过测试,只是一个想法。

time(1) 命令也可能对此有用。

【讨论】:

以上是关于记录 cronjobs 的 cpu 时间、峰值内存等的主要内容,如果未能解决你的问题,请参考以下文章

当虚拟机资源达到峰值

CPU使用率和正在使用的内存之间有啥关系?

zabbix 3.2 监控Windows 实时内存使用率与CPU使用率

模拟稳定的 CPU 负载和峰值

使用会话文件存储随时间增加 CPU 峰值

磁盘延迟导致 EC2 实例上的 CPU 峰值