cronjobs的log cpu time,peak mem等

时间:2011-12-19 16:28:30

标签: php profiling monitoring crontab

我在网络服务器上有相当多的cronjobs,这些cronjobs运行时具有不同程度的优点。

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

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 个答案:

答案 0 :(得分:0)

你实际上可以从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)命令也可能用于此目的。